DEv-C++ Pb Compiler : référence indéfini
Fermé
Djellal
-
5 févr. 2008 à 10:26
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 8 févr. 2008 à 09:03
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 8 févr. 2008 à 09:03
A voir également:
- Référence indéfinie vers
- Telecharger dev c++ - Télécharger - Langages
- Massgrave dev - Accueil - Windows
- Dev home. - Télécharger - Développement
- Dev-pascal - Télécharger - Édition & Programmation
- Comment compiler des pdf - Guide
4 réponses
Mahmah
Messages postés
496
Date d'inscription
lundi 17 septembre 2007
Statut
Membre
Dernière intervention
22 juin 2010
125
5 févr. 2008 à 10:58
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.
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.
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?
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?
Mahmah
Messages postés
496
Date d'inscription
lundi 17 septembre 2007
Statut
Membre
Dernière intervention
22 juin 2010
125
8 févr. 2008 à 00:10
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.
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.
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
8 févr. 2008 à 09:03
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
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