Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 smile

Hors ligne