Bonjour,
Je but sur un problème de compilation avec un tableau déclaré en externe dans une librairie. Lors de l'édition des liens, il ne trouve pas la référence de ce tableauIn function `record': undefined reference to `tabRecord'
J'ai une librairie dans laquelle j'ai déclaré un tableau en extern. J'utilise ce tableau dans les différents modules C de cette librairie (déclartion n°1).
Je veux pouvoir accéder à ce tableau en dehors des modules de la librairie, mais en lecture seulement (déclaration n°2).
Et en globale dans le module C
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 // record.h ... #ifndef __LIB_RECORD_H__ extern uint8_t tabRecord[MAXRECORD] ; // Déclaration pour les modules de la librairie #else extern const uint8_t tabRecord[MAXRECORD] ; // Déclaration pour les utilisateurs de la librairie #endif ...Lors de la compilation et l'archivage de la librairie, un fichier d'entête est créé où l'on retrouve seulement la deuxième déclaration. J'obtiens donc en final un fichier librecord.a et librecord.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 // record.c #include "record.h" ... uint8_t tabRecord[MAXRECORD] ; ...
Nota: MAXRECORD est défini dans une entête commune à toutes les librairies et programmes.
J'ai une seconde librairie qui doit pouvoir avoir accéder au tableau de la première librairie en lecture seulement. Donc dans le module C, j'ai déclaré en entête le fichier H.Lors de la compilation des dépendances (autres lib) et de la compilation et l'archivage de cette seconde librairie, pas de problème (0 erreur et 0 warning).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 #include "librecord.h" // Extern const de tabRecord ... int record(void) { ... if(!tabRecord[x]) ... // Utilisation du tableau en lecture seulement ... }
Lors de la compilation globale du programme final, tous ce déroule bien jusqu'à l'édition des liens où cela me sort l'erreur décrite ci-dessus.
- C'est le seul tableau utilisé par une autre librairie (même pas par le main).
- Je n'ai aucun problème pour d'autres variables externes (complexe ou pas) ou pour les fonctions inter-librairies.
- Je n'ai pas de problème de chemin ou d'options de compilation dans le Makefile (toutes les archives sont présentes lors du linkage).
Je ne vois qu'un problème de déclaration dans mes fichiers, mais lequel ?
Merci pour votre aide.
Compilateur: gcc (Ubuntu 4.4.3-4ubuntu5.1) 4.4.3
Partager