Création, emploi de librairies statiques avec GCC [proprement résolu]

Création, emploi de librairies statiques avec GCC [proprement résolu] - C++ - Programmation

Marsh Posté le 13-08-2003 à 17:35:10    

- J'ai une librairie statique "Midi" qui est en fait un wrapper orienté objet des fonctions de windows de winmm d'acces au midi.
- J'ai une application "SightReader" qui utilise cette librairie.  
 
J'utilise Mingw32.
 
Pour créer ma librairie statique "Midi":
  * Je compile chaque fichier séparement, obtenant a chaque fois un .obj.  
  * Je fais "ar cr libMidi.a *.obj" et j'obtiens le fichier de librairie statique.  
 
Pour créer "SightReader" :
  * Je compile chaque fichier séparement, obtenant a chaque fois un .obj.  
  * Je fais  "g++ -o SightReader.exe -lmidi *.obj"
 
Il trouve bien "libmidi.a" car il ne me donne pas de message d'erreur ( j'ai omis pour des raisons de lisibilité de mettre le path des librairies, mais dans mon makefile il y est et il est correct )
 
Le probleme est qu'a la compilation de "SightReader" j'ai des erreur de linkage, du type :
"Main.obj(.text+0x42):Main.cpp: undefined reference to `midi::CShortMsg::GetData1() const' "
 
Si je ne précise pas -lmidi et que je prends les .obj de "Midi" et que je les met dans le dossier de "SightReader", car marche. Donc les noms des fonctions sont bons.
 
Si vous avez une idée...
 
edit : j'ai une erreur de linkage par fonction. Donc c'est bien un probleme de librairie et pas de code.


Message édité par Ace17 le 24-08-2003 à 15:56:02
Reply

Marsh Posté le 13-08-2003 à 17:35:10   

Reply

Marsh Posté le 13-08-2003 à 23:51:12    

-L.

Reply

Marsh Posté le 13-08-2003 à 23:53:15    

Ben non... le path est correct. Quand il ne trouve pas la librairie il ne linke meme pas.

Reply

Marsh Posté le 13-08-2003 à 23:54:36    

et le -shared ? -fpic ?
 
gcc -o libdawa.so -shared -fpic mon.c
gcc -L. -ldawa main.c

Reply

Marsh Posté le 14-08-2003 à 00:05:31    

Le shared et le fpic a priori y'en a pas besoin, puisqu'il s'agit la d'une librairie statique. Enfin, arrete moi si je me trompe

Reply

Marsh Posté le 14-08-2003 à 00:06:28    

je fais pas de bilitoheque statique  :o

Reply

Marsh Posté le 14-08-2003 à 00:09:18    

lol fallait lire le titre  ;)  
merci quand meme  :hello:

Reply

Marsh Posté le 14-08-2003 à 00:10:00    

Reply

Marsh Posté le 14-08-2003 à 00:17:02    

Ben ouais tu penses bien que j'ai cherché avant de poster ;
Des exemples j'en ai plein et ce que je fais semble correspondre! Je vais continuer a chercher...

Reply

Marsh Posté le 14-08-2003 à 09:59:33    

T'as pas fait un "ranlib libtoto.a" ? en général c'est necessaire (ou "ar -s" )
 
essaye aussi de mettre /chemin/vers/libtoto.a plutot que -ltoto

Reply

Marsh Posté le 14-08-2003 à 09:59:33   

Reply

Marsh Posté le 14-08-2003 à 17:35:18    

J'ai essayé le ranlib... ca ne change rien  :cry:
J'ai changé le -lmidi en /chemin/vers/mon/fichier/libmidi.a
pas de résultat...

Reply

Marsh Posté le 14-08-2003 à 18:22:55    

Bon ben finalement au lieu d'utiliser -lmidi j'ai ajouté la lib et son path entier dans les .obj ... et ca passe. Manifestement c'est la commande -l qui ne "marche pas"... Le mystere reste entier  :??:

Reply

Marsh Posté le 24-08-2003 à 15:55:35    

J'ai enfin compris! Ca m'aura pris du temps mais pour éviter que d'autres tombent dans le meme piege ... les librairies doivent tout simplement se trouver apres les .o dans la ligne de commande...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed