[C] sqrt un peu recalcitrant ...

Résolu
periplasme Messages postés 422 Statut Membre -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
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

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    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
    1. periplasme Messages postés 422 Statut Membre 53
       
      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
    2. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
       
      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