La liaison avec gcc -lm ne définit pas ceil() sur Ubuntu
Je suis actuellement en utilisant gcc pour compiler et j'ai besoin d'utiliser <math.h>
.
Le problème, c'est qu'il ne reconnaît pas la bibliothèque.
J'ai aussi essayé de -lm
et de rien.
La fonction que j'ai essayé d'utiliser ceil()
et j'obtiens l'erreur suivante:
: undefined reference to `ceil'
collect2: ld returned 1 exit status
Je suis en utilisant la dernière Ubuntu et en mathématiques.h est là.
J'ai essayé d'utiliser -lm
dans un autre ordinateur et il fonctionne parfaitement.
Personne ne sait comment résoudre ce problème?
Je n'ai inclure <math.h>
. Aussi, la commande que j'ai utilisé était:
gcc -lm -o fb file.c
Pouvez-vous donner le plein de ligne de commande que vous utilisez?
Et souvenez-vous de
Je n'ai d'inclure les mathématiques.h Également, la commande que j'ai utilisé était: gcc-lm -o fb fichier.c
Avez-vous préciser
Il y a un problème - spécifier les bibliothèques après le nom du fichier source.
Et souvenez-vous de
#include <math.h>
avant d'utiliser ceil
?Je n'ai d'inclure les mathématiques.h Également, la commande que j'ai utilisé était: gcc-lm -o fb fichier.c
Avez-vous préciser
-lm
après le nom du fichier source?Il y a un problème - spécifier les bibliothèques après le nom du fichier source.
OriginalL'auteur drum | 2011-11-25
Vous devez vous connecter pour publier un commentaire.
Prendre ce code et de le mettre dans un fichier
ceil.c
:Le compiler avec:
L'une de ces deux personnes devraient travailler. Si aucun ne fonctionne, présente l'intégralité de message d'erreur pour chaque compilation. Notez que
-lm
apparaît après le nom du fichier source (ou le fichier d'objet si vous compilez la source à l'objet avant de liaison).Migrer vers Mac? Les fonctions de
<math.h>
sont dans le système principal de la bibliothèque, de sorte que vous n'avez pas besoin de spécifier-lm
(bien qu'il soit unlibm.dylib
pour vous donner une bibliothèque de lien contre si vous spécifiez-lm
sur la ligne de commande). Sinon, assurez-vous que vous êtes à l'aide d'un makefile et vous avezLDLIBS
(ouLDLIBES
)-lm
si vous l'utilisez pour justifier la mise en écriture ou par les règles du programme que inclure/exclure de la bibliothèque en fonction de chaque programme. Donc, en d'autres termes, "Non, il n'y a pas un moyen d'éviter de le préciser". Vous pourriez demander à la GLibC équipe pourquoi ils n'ont pas disparu pour une seule bibliothèque.Notez que si vous optimiser le code, il est possible pour le compilateur pour évaluer
ceil(1.2)
au moment de la compilation et éviter le besoin de faire appel à la fonction au moment de l'exécution, auquel cas vous ne pourriez pas besoin de la-lm
bibliothèque. Mais que serait un obscur bord-cas pour le programme simple dans mon exemple — en général, le compilateur ne serait pas capable de faire de l'optimisation et puis vous auriez besoin pour faire le lien avec les mathématiques de la bibliothèque, sauf si les fonctions sont déjà dans le système principal de la bibliothèque.Merci! J'avais oublié de mettre le drapeau après le fichier.
OriginalL'auteur Jonathan Leffler
N'ont pas assez de réputation pour commenter @Jonathan Leffler réponse. Je voulais juste dire que Peter van der Linden livre Expert De La Programmation En C a un bon traitement sur ce sujet dans le chapitre 5 La pensée de la Liaison.
Si vous spécifiez la bibliothèque de mathématiques (ce qui est généralement statique) avant de vos fichiers de l'objet, puis l'éditeur de liens ne sera pas ajouter des symboles.
OriginalL'auteur Daniel Näslund
Essayez de compiler comme ça:
J'ai eu le même problème et il a été résolu à l'aide de cette commande. Aussi, si vous avez installé Ubuntu le même jour où vous avez eu le problème, il est peut-être un problème de mise à jour.
OriginalL'auteur user4371544