#1 Le 22/08/2008, à 17:58
- KKO
[Résolu] Bizarrerie à la compilation (C)...
Bonjour à tous,
J'ai un problème lors de la compilation d'un programmes C (je vais finir à par devenir vraiment dingue).
Les fonctions dans math.h (floor, cos, sqrt) ne sont pas trouvées. Pourtant, j'ai bien mon /usr/include/math.h !!
Par exemple, lorsque j'essaye de compiler ce bout de code hyper simple :
#include <stdio.h>
#include <math.h>
int main()
{
double a = 12.1;
printf("floor of %f is %f\n", a, floor(a));
return 0;
}
Voilà ce que j'obtiens :
KKO@Orion:~/TEST$ gcc test.c
/tmp/ccQvh3WP.o : Dans la fonction "main":test.c:(.text+0x2c): référence indéfinie vers « floor »
collect2: ld a retourné 1 code d'état d'exécution
Quelqu'un a une idée du problème (et éventuellement la solution...) ??
Merci.
Dernière modification par KKO (Le 22/08/2008, à 18:07)
Hors ligne
#2 Le 22/08/2008, à 17:59
- rniamo
Re : [Résolu] Bizarrerie à la compilation (C)...
-lm
< Quelques un des mes programmes | Cuisine Facile (pour les gourmands) | Fast MVC for PHP >
\ ^__^
\ (o o)\_______
(___)\ )\
Hors ligne
#3 Le 22/08/2008, à 18:01
- Compte anonymisé
Re : [Résolu] Bizarrerie à la compilation (C)...
Hello
avec plus de détails : gcc test.c -lm
Pour utiliser des librairies dynamiques, il faut passer -lNomDeLaLibrairy
#4 Le 22/08/2008, à 18:06
- KKO
Re : [Résolu] Bizarrerie à la compilation (C)...
Effectivement ça marche comme ça...
KKO@Orion:~/TEST$ gcc -Wall -o test -lm test.c
KKO@Orion:~/TEST$ ./test
floor of 12.100000 is 12.000000
Est ce que quelqu'un pourrait m'expliquer la différence entre math.h et stdio.h par exemple qui ne demande pas ce -lm ??
Merci...
Hors ligne
#5 Le 22/08/2008, à 18:16
- valAa
Re : [Résolu] Bizarrerie à la compilation (C)...
stdio fait partie de la bibliothèque standard C, qui est automatiquement liée à la compilation.
Si tu veux lier à ton exécutable d'autres bibliothèques, il faut l'indiquer au compilateur (plus précisément au linker) grâce à l'argument -l
Hors ligne