[C] sqrt un peu recalcitrant ...

Résolu/Fermé
periplasme Messages postés 391 Date d'inscription vendredi 22 avril 2011 Statut Membre Dernière intervention 5 février 2013 - 7 juin 2011 à 19:07
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 8 juin 2011 à 09:05
salut tout le monde !
dans le cadre d'une fonction d'un projet (determiner la nature d'un triangle) j'ai besoin de cette bonne vieille fonction sqrt() ...
seulement, a la compilation, j'ai droit a un magnifique
projetMethInfo.c: (.text+0x4c5): undefined reference to 'sqrt'
collect2: ld returned 1 exit status


je vous rassure tout de suite : je n'ai pas oublier d'inclure math.h ;-)

la fonction incriminée :
double distance( coordonnee a, coordonnee b){
     return (sqrt(carre(a.x - b.x)+carre(a.y-b.y)));
}


nb : la fonction carre() retourne une valeur de type double (je pense pas que le probleme viennent de la, mais sait-on jamais).

une âme charitable pourrait-elle m'apporter ses lumière sur ce probleme ?


1 réponse

mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
7 juin 2011 à 19:21
Il faut compiler en linkant avec la librairie lib mathématique (libm.so), ce qui donne la ligne de compilation :

gcc -W -Wall plop.c -o plop -lm


Bonne chance
1
periplasme Messages postés 391 Date d'inscription vendredi 22 avril 2011 Statut Membre Dernière intervention 5 février 2013 53
7 juin 2011 à 19:25
rah ! oui c'est exacte ça compile a merveille ! il me semble avoir deja rencontrer ce probleme, mais plus moyen de me souvenir de la solution ...
merci bien !
0
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
8 juin 2011 à 09:05
Bah de toute façon, "undefined reference" signifie que tu as fait appel à une fonction déclarée (par exemple dans un header) mais pas trouvé dans les binaires (soit les .o, soit les .so, soit les .a avec lesquels tu linkes).

Quand tu as ce message il suffit juste de te demander lequel d'entre eux contient la fonction manquante et le rajouter dans la ligne de compilation où tu linkes.

Bonne continuation ;-)
0