Bonjour,
Un petit post car il est difficile de trouver des informations précises sur le problème que je rencontre dernièrement. Mon logiciel s'étale sur plusieurs sous-dossiers que je compile chacun séparement, en créant à chaque fois un ".a" rassemblant tous mes ".o" du sous dossier en question.
Ensuite, je veux créer une librairie dynamique (.so) ressemblant tous mes ".a". J'aurais deux librairies dynamiques à créer, une libA.so et une libB.so.
Et pour finir, je créé un exécutable qui va utiliser ces deux librairies.
Seulement je me retrouve avec des problèmes de symboles non définis et c'est là que mes connaissances me lâchent.
Par exemple, dans un sous-dossier SD1, contenant quatre fichiers : poissonR.c et poissonR.h, poissonM.c, poissonM.h. J'utilise la constante "truite" dans poisson.c qui est déclaré en extern dans poisson.h.
Cette constante est déclarée dans un autre sous dossier SD2, dans un .c quelconque.
Au final, à la compilation globale, le shell me lâche :
Cependant, dans la librairie dynamique regroupant les sous dossiers SD1 et SD, quand je fais un "nm", truite est bien "defined" (D).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Undefined first referenced symbol in file truite aquarium.a(poisson.o) ... ld: fatal: Symbol referencing errors. No output written to LESPOISSONSONTNOSAMIS.S *** Error code 1 make: Fatal error: Command failed for target `LESPOISSONSONTNOSAMIS.S'
Ai-je raté quelque chose ? Ce fonctionnement m'est parfois un peu obscur ....
Merci par avance pour toute aide.
Partager