Question

Lorsque j'essaie d'appeler des fonctions dans math.h, des erreurs de lien telles que celles-ci apparaissent

undefined reference to sqrt

Mais je fais un #include <math.h>
J'utilise gcc et compile comme suit:

gcc -Wall -D_GNU_SOURCE blah.c -o blah

Pourquoi l'éditeur de liens ne trouve-t-il pas la définition de sqrt?

Était-ce utile?

La solution

Ajoutez -lm à la commande lorsque vous appelez gcc:
gcc -Wall -D_GNU_SOURCE blah.c -o blah -lm

Ceci indiquera à l'éditeur de liens de créer un lien avec la bibliothèque mathématique. Inclure math.h indiquera au compilateur que les fonctions mathématiques telles que sqrt () existent, mais qu'elles sont définies dans une bibliothèque séparée, que l'éditeur de liens doit intégrer à votre exécutable.

Comme FreeMemory l'a souligné, la bibliothèque s'appelle libm.a. Sur les systèmes de type Unix, la règle pour nommer les bibliothèques est lib [blah] .a. Ensuite, si vous souhaitez les lier à votre exécutable, utilisez -l [blah].

Autres conseils

Vous devez lier la bibliothèque mathématique de manière explicite. Ajoutez -lm aux drapeaux que vous transmettez à gcc afin que l’éditeur de liens sache lier les liens libm.a

.

Ajoutez -lm à la fin de la commande gcc pour lier la bibliothèque mathématique:

gcc -Wall -D_GNU_SOURCE blah.c -o blah -lm

Pour que les choses soient liées correctement, l'ordre des drapeaux du compilateur est important! Plus précisément, le math.h doit être placé à la fin de la ligne .

Si vous vous demandez pourquoi la <=> bibliothèque doit être incluse lors de la compilation en C, consultez cette explication ici .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top