Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
952 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C++] Probleme de Makefile/linkage

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] Probleme de Makefile/linkage

n°1916651
batoub
Posté le 19-08-2009 à 15:23:22  profilanswer
 

Bonjour,
 
j'essaye d'utiliser la librairie libboard sans succès pour le moment.
 
J'ai correctement installé la libraire et j'ai un bien un fichier dans /usr/lib/libboard.so (et .a).
 
Par contre, je coince sur le makefile, dans mon fichier .c j'ai bien inclus libboard.h et dans le makefile j'ai mis :
xfig.o: xfig.c xfig.h
 $(CC) $(DEBUG) -c xfig.c $(INC) -l libboard
 
malheuresement, j'ai des problèmes du type:
 undefined reference to `LibBoard::Color::None'
 
J'imagine donc qu'il y a un problème de linkage mais je ne comprend pas pourquoi.
 
 
Merci d'avance à ceux qui esseyeront de m'aider, j'imagine que l'erreur est petite mais j'ai pas fait de c++ depuis des années :/

mood
Publicité
Posté le 19-08-2009 à 15:23:22  profilanswer
 

n°1916658
olivthill
Posté le 19-08-2009 à 15:27:24  profilanswer
 

Essayer en remplaçant  
 
-l libboard  
 
par
 
-l board  
 
La suppression de "lib" date de l'époque où les lignes de commandes ne pouvaient pas avoir beaucoup de caractères. C'est resté, et cela piège tous les pauvres débutants.

n°1916666
batoub
Posté le 19-08-2009 à 15:30:22  profilanswer
 

hum nan toujours le même probleme :/
 
merci!


Message édité par batoub le 19-08-2009 à 15:30:53
n°1916678
olivthill
Posté le 19-08-2009 à 15:37:07  profilanswer
 

Je vérifie sur mon exemple qui marche où j'utilise la bibliothèque libjpeg.a, et j'indique -ljpeg
La seule différence c'est que je ne laisse pas d'espace après le -l.
 
Edit: Mais je n'utilise que du C, et pas du C++ qui requiert peut-être quelque chose de plus.


Message édité par olivthill le 19-08-2009 à 15:39:24
n°1916687
batoub
Posté le 19-08-2009 à 15:42:58  profilanswer
 

oué, sans l'espace c'est pareil. :/

n°1916690
Taz
bisounours-codeur
Posté le 19-08-2009 à 15:45:44  profilanswer
 

Si tu -c, alors tu ne link pas, donc ça ne sert à rien ici. c'est à l'assemblage que tu as le problème.
 
-lboard

n°1916696
batoub
Posté le 19-08-2009 à 15:51:31  profilanswer
 

hum, je vais envoyer tout mon makefile ca sera plus simple  
 

Code :
  1. DEBUG= -g -Wall -pedantic -Wno-deprecated
  2. CC=g++
  3. OBJ= xfig.o
  4. INC= -I../planificateur -I../kalman -I../log -I../rrt -I../ann -I../interface_graphique -I.
  5. A=libgarixfig.a
  6. libgarixfig.a: $(OBJ)
  7. rm -f $(A) ../$(A)
  8. ar -ruv $(A) $(OBJ)
  9. cp $(A) ..
  10. xfig.o: xfig.c xfig.h
  11. $(CC) $(DEBUG) -c xfig.c $(INC) -lboard
  12. clean:
  13. rm -f $(OBJ) $(A) ../$(A)

n°1916746
Taz
bisounours-codeur
Posté le 19-08-2009 à 16:39:24  profilanswer
 

Ton .a n'est pas linké par définition. C'est juste une archive de .o.
 
Sur ton assemblage final de tes .o et ton .a, un simple -L. -lboard suffit.

n°1916749
Taz
bisounours-codeur
Posté le 19-08-2009 à 16:41:21  profilanswer
 

c'est nulle part  dans ton makefile que ça foire, puisque:
- ar c'est juste la création de l'archive
- ton CC (qui est g++ en plus ...) ne fait qu'un -c (vire ce -l qui ne sert à rien)

n°1916755
Taz
bisounours-codeur
Posté le 19-08-2009 à 16:45:10  profilanswer
 

$ cat math.c
#include <math.h>
 
double foo(double d)
{
        return sqrt(abs(sin(d)));
}
 
$ gcc -c math.c
$ ar cru libmath.a math.o
$ cat main.c
double foo(double d);
 
int main() {
        foo(3.14);
        return 0;
}
 
$ gcc -c main.c
$ gcc -o foo -L. main.o -lm -lmath
$ nm foo |grep foo
00000000004005a0 T foo

mood
Publicité
Posté le 19-08-2009 à 16:45:10  profilanswer
 

n°1916964
batoub
Posté le 20-08-2009 à 10:29:51  profilanswer
 

merci Taz!
 
Effectivement, je mettais mon -lboard au mauvais endroit. J'ai plusieurs makefile "embriqué" et c'est un peu le bazard :)
 
Merci pour ton aide!

n°1916981
Taz
bisounours-codeur
Posté le 20-08-2009 à 10:48:31  profilanswer
 

Attention, pour l'assemblage, l'ordre des arguments est important (toposort, etc).


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C++] Probleme de Makefile/linkage

 

Sujets relatifs
Problême avec un petit script javascriptProbleme de code java /LDAP
Problème de procédure PL/SQL pour lancer un batch sur ordonnanceurprobleme thread linux (pthread)
Problème avec jQueryproblème de recuperation de la date
Problème retour à la ligne données mysqlProbleme de DLL ? "Automation type not supported in Visual Basic"
Problème de connection Mysql en local, avec Easyphp ou Wampserver [OK][CWebControl2]Probleme avec Navigate
Plus de sujets relatifs à : [C++] Probleme de Makefile/linkage


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR