Compilation gcc undefined reference to ...

Fermé
Kat - 31 août 2005 à 16:43
 Manu - 26 févr. 2007 à 18:31
Bonjour,

J'ai un probleme de compilation. Je ne suis pas très douée en makefiles donc je sais que mon problème vient de là.

J'ai écrit un makefile qui me génère des .o correctement:
fichier.o: fichier.c fichier.h
gcc -Wall -03 -c fichier source
Ensuite, pour générer l'exécutable, j'utilise des libs (.a) qui se trouvent dans /usr/lib:
executable: $(OBJ)
-lnom_de_lib -o executable $(OBJ)
Apparement, il trouve les libs puisqu'il ne dit pas le contraire mais me met une "undefined reference to ..." à chaque fois que je fais appel à l'une des fonctions de ces libs.
Auriez-vous une solution? Merci

Kat

4 réponses

Bonjour,

La commande de compilation :

/opt/rtems-4.6/bin/sparc-rtems-gcc.exe -g leon_full_test.c -o leon_full_test sous Cygwin

ne mentionne qu'un seul fichier à compiler (leon_full_test.c).
De ce fait, il n'y a pas de raison que "toutes ces fonctions écrites dans leurs fichiers respectifs" soient compilés.

A priori, il faut indiquer tous les fichiers concernés dans la commande.

NB il est d'usage de faire des compilations séparées de chaque fichier (mettre l'option -c, ne pas mettre le -o), puis de "linker" l'ensemble (mettre la liste des .o avec une option -o).

Manu
3
crabs Messages postés 908 Date d'inscription lundi 18 avril 2005 Statut Membre Dernière intervention 3 août 2008 506
31 août 2005 à 18:52
Salut,
Essaies de positionner les lib à la fin de la ligne de compil
gcc -o executable $(OBJ)  -lnom_de_lib

A+, crabs
1
C'est gentil d'avoir répondu.
J'ai essayé mais malgré tout ça ne marche pas. D'autres idées?
0
crabs Messages postés 908 Date d'inscription lundi 18 avril 2005 Statut Membre Dernière intervention 3 août 2008 506
1 sept. 2005 à 18:00
Le mieux c'est que tu postes ton makefile et les noms de quelques fonctions
qui ne fonctionnent pas.
0
Bonjour,

J'utilise un cross-compiler sour Cygwin pour compiler des test écrits en C. Ces tests seront mis en mémoire virtuelle pour simuler un processeur LEON2. Malheureusement lors de la compilation, des erreurs du type "undefined reference to ..." vers des fonctions écrites dans d'autres fichiers (ces fichiers en question sont tous dans le même dossier).

En tapant la ligne
/opt/rtems-4.6/bin/sparc-rtems-gcc.exe -g leon_full_test.c -o leon_full_test sous Cygwin

Les erreurs précités s'affichent et je ne comprends pas trop pourquoi elle apparaissent.

De plus, je sais que toutes ces fonctions écrites dans leurs fichiers respectifs utilisent les mêmes fichiers include donc ma première idée a été de rajouter les intitulés de toutes ces fonctions dans l'include et dans le main principal (leon_full_test.c) rajouté l'intitulé de ces fonctions précèdés par extern pour dire que ces fonctions sont implémentées dans des fichiers externes.

Ca marche toujours pas. pourtant en faisant la même chose avec un autre projet, cette méthode marche sans problème.

Si quelqu'un a une solution, faites moi signe

Merci,
0