échantillon code pour fmod: compilation: p> i get p> /tmp/ccztjo01.o: En fonction "Main": P>
Main.c :(. Texte + 0x4D): Référence non définie à `FMOD ' P>
Collect2: LD renvoyé 1 statut de sortie p>
blockQuote> Puis j'ai trouvé ceci dans google: p> Pourquoi dois-je utiliser
-LM code>, qu'est-ce que c'est exactement? D'où je peux obtenir plus d'informations sur GCC en détail? P> P>
3 Réponses :
-lm code> est simplement le dire à lier
libm code>, qui contient toutes les routines mathématiques de point flottant, y compris (aucune surprise ici)
fmod code> . P>
Ce n'est pas le compilateur, mais le em> linker em>, [beaucoup] Plus d'infos: GCC, la collection GNU Compiler . P> ld code>, qui se plaint. Il ne peut pas trouver la routine
fmod code> dans votre programme. Vous devez le dire de créer un lien avec la bibliothèque de maths
libm code> avec le drapeau
-l code>. P>
Lorsque j'entraîne Bref Story Short, les bibliothèques doivent être placées (au moins une fois) à droite de "l'endroit où ils sont utilisés. P> gcc -lm main.c -o Main. / code> Je reçois toujours une erreur de liaison. Je dois écrire
gcc Main.c -lm -o principal code> pour cela fonctionne correctement. Si cela fonctionne pour vous l'inverse, c'est un peu étrange. Je comprends que la liaison trouvera le symbole déclaré dans Main.c (c.-à-d.
double fmod (double, double) code>), mais ne le résolvez que s'il trouve sa définition ultérieurement (c.-à-d. Dans
libm .a code>). p>
De retour en 2010, lorsque cette question a été posée, la plupart des distributions Linux ont configuré GCC de relier les bibliothèques partagées, qu'ils soient apparus avant ou après avoir été référencés dans la séquence de liaison. Et certains font encore.
Intéressant. J'ai ajouté une réponse parce que je pensais que cela peut être utile pour que quelqu'un d'autre regarde dans cette erreur.