Salut à tous, et surtout aux 22 personnes qui m'ont lus! :?
J'ai donc enfin trouvé la réponse au problème qui me turlupinait depuis plusieurs jours, le problème se situe dans la partie statique de la librairie (le .lib).
Si je ne comprends toujours pas comment ça peut fonctionner sous windows, j'ai un début de réponse sous linux. Le problème vient dans un problème de convention de nommage. Je ne rentrerais pas dans les détails (ceux voulant des infos pourront regarder en pages 26-27 de ce pdf : Mode d'emploi de gcc).
Disons simplement que le linker cherchait un nom avec une extension et la lib statique l'avait sans extension.
Donc, ce que j'ai fait pour solutionner mon problème:
- Créer un fichier .def à partir de la dll:
Code :
- pexports unrar.dll > unrar.def
|
- Editer le fichier def et renommer les fonctions avec la bonne extension (le problème c'est que je n'ai pas les extensions pour toutes les fonctions, je ne donnerais que celles dont je connais (elles sont données comme références indéfinies lors du linkage)):
l'extension est de la forme @n avec n le nombre d'octets passés sur la pile
Exemple:
Code :
- RARGetDllVersion --> RARGetDllVersion@0
|
Liste des fonctions avec extension
Code :
- RARCloseArchive@4
- RARGetDllVersion@0
- RAROpenArchiveEx@4
- RARProcessFile@16
- RARReadHeader@8
- RARReadHeaderEx@8
- RARSetCallback@12
|
- créer la bibliothèque statique utilisable par le linker:
Code :
- dlltool -k -A -D unrar.dll -d unrar.def -l libunrar.a
|
Après cela j'ai compilé normalement et ça a fonctionné impec.
++
Message édité par nioc_bertheloneum le 26-06-2007 à 21:25:05