Création, emploi de librairies statiques avec GCC [proprement résolu] - C++ - Programmation
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.
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
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
Marsh Posté le 14-08-2003 à 00:10:00
ReplyMarsh 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...
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
Marsh Posté le 14-08-2003 à 17:35:18
J'ai essayé le ranlib... ca ne change rien
J'ai changé le -lmidi en /chemin/vers/mon/fichier/libmidi.a
pas de résultat...
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
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...
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