|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Futur Membre du Club
![]() Inscription : avril 2010 Messages : 105 ![]() |
Bonjour
Travaillant habituellement avec codeblock, j'essaie de me remettre à la compilation en ligne de commande. J'ai un problème avec le code basique que je teste, qui, à l'execution, me retourne "undefined reference to `sqrt'". Serait-ce un problème de librairie ? Voici donc mon fichier main.c : Code :
gcc -c main.c et gcc -o EXE -lm main.o (-lm pour avoir accès aux librairies mathématiques) Qu'est ce qui manque d'après vous ? Merci, L. |
||
|
|
00
|
|
|
#2 |
![]() ![]() Chercheur d'emploi Inscription : septembre 2007 Messages : 4 614 ![]() |
Hello,
C'est étrange. Ça devrait fonctionner en l'état et ça compile très bien chez moi avec les commandes que tu précises ici. De plus, est-ce vraiment à l'exécution ou seulement à la compilation que tu obtiens ce message ? |
|
|
00
|
|
|
#3 |
|
Futur Membre du Club
![]() Inscription : avril 2010 Messages : 105 ![]() |
J'ai manqué de précision :
c'est à la deuxième étape de compilation (c'est à dire : lors de gcc -o EXE -lm main.o), l'executable ne se créant pas. |
|
|
00
|
|
|
#4 |
![]() ![]() Chercheur d'emploi Inscription : septembre 2007 Messages : 4 614 ![]() |
Quelle version de GCC utilises-tu ? (avec gcc -v).
Il se peut que l'ordre dans lequel tu passes tes paramètres influe. Essaie de déplacer -o EXE en fin de ligne puis, si ça ne fonctionne toujours pas, de faire passer -lm après main.o. D'autre part, tu n'es pas obligé de faire de la compilation séparée : tu peux directement écrire gcc main.c -lm -o EXE. Bien que cela ne résolve pas le problème ci-dessus, peux-tu nous dire si ça fonctionne de cette façon ? Enfin, il est possible que le compilateur ne voie pas par défaut les dépôts des bibliothèques concernées, mais ce serait très étonnant car il s'agit quand même des bibliothèques standard, voire même le minimum syndical exigible. — Avec quel système d'exploitation travailles-tu ? — Est-ce que tu obtiens d'autres messages d'erreur que celui signalé ? — Lorsque tu tapes alias dans ta ligne de commande, existe-t-il une ligne concernant gcc ? — Que donnent which gcc et ls -l `which gcc` ? |
|
|
00
|
|
|
#5 |
|
Futur Membre du Club
![]() Inscription : avril 2010 Messages : 105 ![]() |
c'est la version 4.7.2 de gcc que j'utilise.
Je me lance tout de suite dans les tests que tu proposes... |
|
|
00
|
|
|
#6 |
|
Futur Membre du Club
![]() Inscription : avril 2010 Messages : 105 ![]() |
' gcc -lm main.o -o EXE ' --> ne marche pas
gcc main.o -lm -o EXE --> OK ! gcc -o EXE main.o -lm --> re OK ! gcc main.c -lm -o EXE --> encore OK !! Bon, il semblerait que la version de gcc que j'ai n'accepte pas n'importe quel ordre de commande (ce qui est bizare parcequ j'avais recopié cet ordre sur un tuto..) Est-ce vraiment quelque chose de surprenant ? (pour info, mon OS est Linux sur Ubuntu 12.10 secure Remix.) L. |
|
|
00
|
|
|
#7 |
![]() ![]() Chercheur d'emploi Inscription : septembre 2007 Messages : 4 614 ![]() |
L'ordre dans lequel les bibliothèques (-l) est spécifié ainsi que celui des dépôts où le compilateur va les chercher (-L) a toujours influé. Voir : http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html
Cependant, je m'étonne que ton compilo échoue dans certains cas puisque j'utilise la même version sans problème (sur une Fedora 18). |
|
|
00
|
|
|
#8 |
|
Futur Membre du Club
![]() Inscription : avril 2010 Messages : 105 ![]() |
OK, je note l'adresse de ce site et je te remercie du tuyau (je n'aurais pas imaginé que ça ai une importance cet ordre de commande!)
Peut être que cela dépend aussi de la version de gcc que nous utilisons respectivement. A+ |
|
|
00
|
|
|
#9 |
![]() ![]() Chercheur d'emploi Inscription : septembre 2007 Messages : 4 614 ![]() |
|
|
|
00
|
|
|
#10 |
|
Futur Membre du Club
![]() Inscription : avril 2010 Messages : 105 ![]() |
mmm... A part la distribution d'OS, je ne vois pas ce qui change. Es tu aussi en 64 bits ?
|
|
|
00
|
|
|
#11 | ||
|
Expert Confirmé Sénior
![]() ![]() Ingénieur systèmes embarqués Inscription : juin 2009 Messages : 1 699 ![]() |
Citation:
Citation:
__________________
Si Code::Blocks vous dit undefined reference to 'socket@12', cela signifie que vous avez un problème d'édition des liens. Allez dans Projects / Build Options / Linker Settings / Add et renseigner ici les .a qui vont bien. Exemple pour les sockets : C:\Program Files\CodeBlocks\MinGW\lib\libws2_32.a Pour les adeptes du langage SMS, allez ici et ramenez la traduction française ^^ Pour vos problèmes d'embarqué, utilisez le forum dédié ! |
||
|
30
|
|
|
#12 | |
|
Expert Confirmé Sénior
![]() |
Personnellement, je conjecturerais que la dernière phrase devrait être ceci:
Citation:
__________________
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant. "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?" Apparently everyone. -- Raymond Chen. Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen. |
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com