Utilisation d'une librairie avec 2 compilateurs

Utilisation d'une librairie avec 2 compilateurs - C++ - Programmation

Marsh Posté le 07-06-2005 à 10:45:31    

Bonjour,
 
j'ai un petit problème avec une librairie c++. La librairie en question est la lib wrapi, compilée à partir de Visual, et je veux l'utiliser avec devcpp. Je dispose des sources et d'un couple dll/lib pré compilés.
 
J'ai fait un peu le tour des forums et sites, ce qui m'a d'abord guidé sur la voie des problèmes de décoration. Effectivement la librairie est écrite en c++, cependant les fonctions exportées sont en C (même si je ne pense pas que ça change grand chose niveau décoration, vu qu'on doit utiliser le compilo c++).
Les fonctions exportées sont déclarées uniquement avec un __declspec, et à la compilation du projet utilisant la lib, le linker sort évidement une erreur à la compilation du projet utilisant la lib.
J'ai donc essayé de recompiler la lib avec des extern "C" en plus, sans plus de succès au link du projet.
J'ai vu qu'il était également possible de travailler avec des .def pour forcer le nommage des fonctions exportées de la lib, mais j'avoue n'avoir pas bien compris comment faire, malgré les explication détaillées que j'ai pu trouver (cf un tuto sur comment faire marcher une dll VS avec la suite borland)
 
J'ai ensuite lu que les fichiers .lib ne sont pas supportés par le compilo de devcpp (j'ai également lu le contraire quelque part, à partir de la version jesaispluscombien de mingw, ça passe). J'ai donc essayé de trouver des outils de conversion, et je suis tombé sur reimp, qui permet d'obtenir un .a à partir d'un .lib. J'en suis à cette étape. La génération d'un .a ne pose pas de problème, mais j'ai pas encore testé avec la version 'extern "C"' de la dll. Et je ne pourrai pas le faire avant ce soir, chez moi (j'ai pas visual au taf). En tout cas, ça marche pas mieux avec la dll précompilée et la lib convertie en .a, et l'erreur de linker est la même : undefined symbol _imp__'déco''nom de la fonction''déco'
 
voila la situation, maintenant, les question :
- des idées sur la manière de procéder ? ou alors si je suis un peu con et que avec le extern c ça devrait marcher tout seul ?
- à partir des source d'une dll, comment on fait pour obtenir une lib statique ? j'ai essayé de changer les options de la lib dans VS (lib à la place de dll), et à la compilation il me sort une erreur du genre : pas de symbole externe défini, on pourra pas appeler les fonction de la lib (si je me souviens bien et que j'ai compris l'erreur ;)), en pointant syur le fichier .res du projet. A noter que j'ai laissé les declspec, sans savoir si c'est bien ou non pour une lib statique.
- sachant que la classe principale de la lib est dérivée de CWinapp, y a t il la moindre chance d'arriver à modifier les sources pour compiler la lib sou devcpp ? (saleté de mfc  :p )
 
Ouf enfin fini, merci à ceux qui auront tout lu
 
edit : faute dans le titre


Message édité par mooiz le 07-06-2005 à 10:56:22
Reply

Marsh Posté le 07-06-2005 à 10:45:31   

Reply

Marsh Posté le 08-06-2005 à 14:29:05    

up : personne ne répond parce que personne ne l'a fait ou parce que c'est trop long à lire ?
Pour le premier cas, si jamais j'y arrive, dites moi si vous êtes interessés par la méthode, que je vous renseigne

Reply

Marsh Posté le 08-06-2005 à 17:13:08    

Reply

Marsh Posté le 09-06-2005 à 14:15:58    

Pas d'autres réponses ? Bon ben merci Tarabiscote, j'essaierai ça plus tard (quoique il me semble avoir déjà tenté un truc du genre, mais dans le doute je préfère refaire). Pour le moment je me passe de la lib en reprenant des bouts de code de celle ci

Reply

Marsh Posté le 09-06-2005 à 14:24:52    

Petite précision avec mingw la commande pour faire la lib d'import à partir du .def :
dlltool --input-def *nom*.def  --dllname *nom*.dll --output-lib lib*nom*.a -k
(le -k à la fin c'est si t'as des @num dans ton .def, y a aussi -U qui peut etre utile si tu as un sous tiret dans la dll de plus devant les nom de fonctions que dans le .h)

Reply

Marsh Posté le 09-06-2005 à 14:50:24    

Que dire... vraiment génial Tarabiscote, un grand merci à toi, j'essaye ça dès que je peux

Reply

Sujets relatifs:

Leave a Replay

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