Erreur de Link : Undefined reference to... - C - Programmation
Marsh Posté le 02-05-2007 à 12:12:00
En fait, je suis déjà sous Windows
J'utilise devkitPro et mingw pour compiler..
Bon je reconnait que visual c'est plus simple pour mettre en place un projet, mais je n'est pas le choix pour la plateforme de développement :S
Merci pour la réponse
Marsh Posté le 02-05-2007 à 18:14:36
ReplyMarsh Posté le 02-05-2007 à 20:07:42
Oui, Les répertoires sont bien définis avec -L, et les librairies aussi. Pour lier avec l'archive librairie libmad, j'ai juste ajouté -l lmad , ce qui fonctionne avec mingw.
Marsh Posté le 02-05-2007 à 20:55:49
Le fichier s'appelle liblmad.so ? (ou .dll en l'occurrence)
Marsh Posté le 03-05-2007 à 02:30:02
non, j'utilise l'archive libmad.a
Je viens d'essayer de compiler et de linker, avc gcc, un bout de code (utilisant seulement des fonctions standards et des fonctions de la librairie libmad) utilisant les fonctions de la librairie, et je n'ai pas eu de problème.
Le problème viendrai surement du Makefile, que j'utilise pour builder l'ensemble du projet. Pour ceux qui connaissent, J'essai de compiler un homebrew (nom qui fait style pour dire que c'est programme DS) pour Nintendo DS avec devkitPro, la libnds, et la palib.
Des projets sont fournis à titres d'exemple, et il n'y a pas de problème lors du build. J'ai complété le makefile d'un projet existant pour linker avec la librairie libmad. Les chemins sont correctement configurés (avec -L) et la librairie est ajoutée avec -lmad (Je me suis planté dans mon précédent poste quand je disais que j'ai ajouté la librairie avec -l lmad).
L'erreur provient surement du Makefile, car lors du build, les erreurs qui apparaissent sont les erreurs typiques que l'on a lorsque la librairie n'est pas trouvée.
Marsh Posté le 03-05-2007 à 06:30:53
Si ton fichier s'appelle "libmad.a", alors il faut écrire "-lmad", et non "-l lmad".
edit : j'étais mal réveillé ce matin, tu peux ignorer ce message
Marsh Posté le 03-05-2007 à 10:59:00
Voila la bête :
Code :
|
J'ai seulement ajouté dans le makefile, les "variables" (je sais pas si on appelle ça comme ça pour un makefile) :
LIBSMAD, LIBDIRMAD, et LIBPATHMAD
En gros j'ai fait la meme chose que pour les variables LIBS, LIBDIRS, LIBPATHS, LIBPA, LIBDIRPA, et LIBPATHPA qui étaient déjà présentes.
J'ai ensuite ajouté les variables LIBSMAD et LIBPATHMAD dans la ligne de build
@$(LD) $(LDFLAGS) -specs=ds_arm9.specs $(OFILES) $(LIBPATHMAD) $(LIBSMAD) $(LIBPATHPA) $(LIBSPA) $(LIBPATHS) $(LIBS) -o $(TARGET).elf
Pour information, voici ce que j'obtiens lorsque le build échoue
Code :
|
Marsh Posté le 04-05-2007 à 13:26:57
Il n"y pas un (ou une) spécialiste du makefile dans le coin ?
Marsh Posté le 09-05-2007 à 16:48:59
Bon...
J'ai pu enlevé les underscore devant les noms de sympboles. Pour chaque fichier objet, il faut utiliser la commande
objcopy --remove-leading-char fichier.o
Après l'avoir fait pour chaque fichier objet de la librairie, on refait l'archive avec la commande ar, et puis voilou, on se retrouve avec les noms de symboles "corrects".
c plutôt cool, mais le problême ne venait pas de là
Avant de faire ça, j'ai tenté d'utiliser la commande objcopy directement sur la librairie libmad.a. ça a fait n'importe quoi, car à l'édition des liens, il y a eu une erreur signalant que la librairie libmad.a avait un format inconnu...
Cela montre que à l'édition des liens, il va chercher la bonne librairie. Alors pourquoi, si le nom des symboles est maintenant correct, il y a toujours des erreurs de "undefined reference to ..." pendant l'édition de liens ???
Marsh Posté le 02-05-2007 à 10:53:33
Salut à tous !
Je tente désespérément de compiler et linker un programme avec gcc. Je souhaite utiliser la librairie libmad (qui permet de décoder du mpeg), mais j'ai un problème lors de l'édition des liens.
Toutes les fonctions de la librairie libmad ne sont pas trouvées, et les erreurs "undefined reference to nom_fonction" apparaissent. J'utilise l'archive libmad.a, et après avoir utilisé la commande nm de mingw, tous les symboles de la librarie apparaissent avec un '_' devant. Par exemple, la fonction "mad_stream_init()" déclarée dans le .h devient _mad_stream_init dans l'archive .
Se peut-il que le problème d'édition de liens vienne de là, ou alors ça n'a vraiment aucun rapport ?