2008-09-19 6 views

Répondre

7

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

Ceci indiquera au lieur de lier avec la bibliothèque mathématique. Inclure math.h dira au compilateur que les fonctions mathématiques comme sqrt() existent, mais elles sont définies dans une bibliothèque séparée, que l'éditeur de liens doit contenir avec votre exécutable.

Comme FreeMemory l'a signalé, 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 voulez les lier à votre exécutable, utilisez -l [blah].

+2

En fait, si vous faites cela sur un système Linux moderne, vous finirez par lier à libm.so, qui est l'équivalent de la bibliothèque dynamique de libm.a. – CesarB

2

Vous devez lier explicitement la bibliothèque mathématique. Ajouter -lm aux drapeaux vous passez à gcc afin que l'éditeur de liens sait relier libm.a

+0

Vous voulez dire libm.a :) – Dima

+1

Vous savez, vous pouvez le réparer, non? :) Vous pouvez toujours modifier vos réponses et vos questions. – Dima

0

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

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

Pour les choses à maillées, l'ordre des questions drapeaux du compilateur! Plus précisément, le -lm doit être placé at the end of the line. Si vous vous demandez pourquoi la bibliothèque math.h doit être incluse lors de la compilation en C, consultez cette explication here.

Questions connexes