DEv-C++ Pb Compiler : référence indéfini

Fermé
Djellal - 5 févr. 2008 à 10:26
Char Snipeur Messages postés 9688 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 2 octobre 2020 - 8 févr. 2008 à 09:03
Bonjour,

j'ai un souci quand je compile. J'ai les messages d'erreurs suivants :
Temp/ccCsaaaa.o(.text+0x402):Baleuro.c: undefined reference to `PCLStartJOB'
Temp/ccCsaaaa.o(.text+0x43b):Baleuro.c: undefined reference to `PCLDownLoad'
Temp/ccCsaaaa.o(.text+0x4d6):Baleuro.c: more undefined references to `PCLDownLoad' follow
Temp/ccCsaaaa.o(.text+0x91d):Baleuro.c: undefined reference to `PCLSetFont'
Temp/ccCsaaaa.o(.text+0x93a):Baleuro.c: undefined reference to `PCLCursorXY'
Temp/ccCsaaaa.o(.text+0x11b3):Baleuro.c: undefined reference to `PCLEraseFonts'
Temp/ccCsaaaa.o(.text+0x11cc):Baleuro.c: undefined reference to `searchpath'
Temp/ccCsaaaa.o(.text+0x1f32):Baleuro.c: undefined reference to `StringTo_EAN8'
Temp/ccCsaaaa.o(.text+0x1f94):Baleuro.c: undefined reference to `PCLCursorXY'
Temp/ccCsaaaa.o(.text+0x1fd2):Baleuro.c: undefined reference to `StringTo_2_5i'
Temp/ccCsaaaa.o(.text+0x2131):Baleuro.c: undefined reference to `PCLCursorXY'
Temp/ccCsaaaa.o(.text+0x2150):Baleuro.c: undefined reference to `PCLSetFont'
Temp/ccCsaaaa.o(.text+0x2197):Baleuro.c: undefined reference to `PCLCursorXY'

Le repertoire de mon bin est OK. Je ne comprends pas pourquoi il m'affiche ses erreurs.

Merci d'avance pour vos réponses

4 réponses

Mahmah Messages postés 496 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010 124
5 févr. 2008 à 10:58
Bonjour,

Ce sont des erreurs de Link. Chaque fichier .c est compilé car tu lui as bien dit que chaque fonction existe (techniquement #include<Pclmap.h>) et donc le compilo n'a pas eu à se plaindre de la syntaxe car tout est connu.

Par contre une fois chaque module compilé (.o) il faut assembler le tout pour faire un fichier binaire. Le Link quoi, mais là il ne trouve pas le code pour toutes les fonctions qu'il liste là. Soit tu ne lui as pas donné les fichiers à compiler (je suppose un Pclmap.c qui doit trainer quelque part) soit il est existe une librairie contenant le code déjà compilé mais tu ne lui as pas donné non plus (Ca ressemble à du linux tout ça, ça doit être un truc genre Pclmap.s ou Pclmap.a)

voilà mon avis,
M.
1
Merci pour ta réponse.

Effectivement je pense qu'il doit me manquer un fichier. C'est un très vieux programme que je dois maintenir.

Mais par contre, ce que je ne comprends pas c'est que j'ai bien le fichier qui comprend les fonctions 'PCLStartJOB' ,`PCLDownLoad', 'PCLSetFont' ...etc et le linker me met 'undefined reference to' pour chacune de ces fonctions. Pourquoi? Est-ce à cause du fichier manquant qu'il génère ses erreurs?
0
Mahmah Messages postés 496 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010 124
8 févr. 2008 à 00:10
Si tu as le header et le module compilé cela devrait passer. Il faut voir avec les options de projet de Dev-Cpp pour lui ajouter le .o pour la phase de link. C'est sûrement dans la même catégorie que pour les librairies statiques. (.lib)

Sinon il me semble qu'avec gcc on n'accède jamais au linker directement, si mes souvenirs sont bons:

on compile chaque fichier avec
gcc -c fichier.c - o fichier.o
(ou g++ pour le C++)
Et je ne sais plus si il faut donner les .h inclus par le fichier.c, je pense que non.

on link avec
gcc fichier1.o fichier2.o fichier3.o -o fichier.exe

Donc il doit y avoir moyen de linker avec un module précompilé. C'est un projet par Makefile ?

Il est possible aussi que Dev-Cpp fasse tout d'un coup genre:
gcc fichier1.c fichier2.c fichier3.c fichierPrécompilé.o -o sortie.exe

Il faut alors voir avec les options -i pour ajouter des répertoires où chercher les fichiers de code et -l (L minuscule) pour les répertoires de recherche des librairies statiques et modules précompilés.

Après c'est possible que Dev-Cpp masque tout ça derrière ses options de projets mais il me semble qu'il était clean là dessus. Sinon tu peux toujours essayer de récupérer tous les .o qu'il t'a compilé, de tout copier dans un répertoire à part avec ton Pclmap.o et de faire le link en passant directement par gcc et tu seras fixé.

Par contre Pclmap avait l'air fortement en provenance directe de chez Linux, si le type qui a commencé le projet bossait sous linux ton .o ne sera pas compatible. (En fait je n'ai jamais essayé en fait mais...)

Bonne chance,

M.
0
Char Snipeur Messages postés 9688 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 2 octobre 2020 1 333
8 févr. 2008 à 09:03
Salut.
Je pense qu'il manque plutôt une bib à la compilation.
Il faut rajouter un -l... dans DevCpp pour les option de lien.
Vu les noms des fonctions, ça doit être -lpcl pour inclure les répertoires bibliothèque avec gcc, c'est "-L<chemin>" (en majuscule), le -l (minuscule) sert à lier directement la lib*.a
0