MinGW, DLL externe, DEF, LIB, a. Je sèche.
Bonjour.
Pour un de mes projets écrit avec code::blocks + wxWidget + MinGW, tous dans leur version récente, je dois faire appel à des fonctions disponibles dans une DLL fournie par un tiers.
Je dispose du fichier DLL, du fichier .h des fonctions disponibles, du fichier LIB, et après quelques efforts, j'ai réussi à extraire le fichier DEF avec l'outil dlltool de MinGW32
Code:
1 2 3 4
| LIBRARY "EQ2008_Dll.dll"
EXPORTS
User_CloseScreen@@YGHH@Z
User_ReadScreen@@YGHHPAUHDC__@@@Z |
Je n'arrive pas à linker correctement cette DLL dans mon projet. L'édition de lien me donne systématiquement une erreur à chaque appel de fonction dans la DLL: undefined reference to `_imp___Z16User_CloseScreeni@4'
Mon projet est compilé avec MinGW, donc j'utilise des fichiers .a pour linker, alors que la DLL est livré avec un fichier.LIB
Ce que j'ai essayé:
- renommer le .LIB en .a: ne marche pas
- inclure la DLL dans les bibliothèque à linker (avec les autres .a du projet): ne marche pas
- extraire de la DLL le .a avec reimp.exe: ne marche pas. J'obtiens un .a vide
Bref, je sèche. Avant de modifier le projet pour appeler directement les fonctions en lisant la DLL en dynamique lors de l'exécution (mon plan B !), j'aimerai savoir si vous avez des idées sur mon problème ?
Comment convertir un .LIB ou .def en .a compatible avec MinGW ?
Peut-on dans code::blocks directement linker une DLL sans le .a ?
Merci de te pencher sur mon problème..
Citation:
Envoyé par
koala01
Salut,
Normalement, si tu as réussi à obtenir le fichier def, il te "suffit" d'un
Code:
dlltool -k --outputlib libEQ2008_Dll.a --def lefichier.def
(j'ai utilisé le nom de la dll comme base pour le nom du fichier *.a ;)) pour créer une bibliothèque d'importation.
Justement, c'est là où j'ai un problème.
Bien sûr, le fichier EQ2008_Dll.def existe dans le répertoire de dlltool et est rempli avec les définitions.
Lorsque j'entre cette commande
dlltool -v -k -d EQ2008_Dll.def -l EQ2008_Dll.a
,j'ai bien un fichier EQ2008_Dll.a qui est créé, mais il est vide. Taille: 0K, et ouvert avec Notepad++, pas un seul petit octet à lire....
Même chose en essayant la version de dlltool dans mingw32.
Je pense que si j'arrive à obtenir un fichier .a non-vide, j'aurai progressé, mais là quelque chose m'échappe.
Bien sûr, le fichier EQ2008_Dll.def existe dans le répertoire de dlltool et est rempli avec les définitions.
Le fichier complet (avec -v) est celui-ci:
Code:
1 2 3 4 5 6 7 8 9
| dlltool: Processing def file: EQ2008_Dll.def
dlltool: LIBRARY: EQ2008_Dll.dll base: ffffffff
dlltool: Processed def file
dlltool: Processing definitions
dlltool: Processed definitions
dlltool: Creating library file: EQ2008_Dll.a
dlltool: run: as -o daqh.o daqh.s
dlltool: No such file or directory
dlltool: CreateProcess |
Après vérification, le fichier .s est bien créé, mais pas le .o