Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2304 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [Résolu] Cross-Compilation et DLL

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu] Cross-Compilation et DLL

n°1579068
nioc_berth​eloneum
Posté le 25-06-2007 à 22:23:10  profilanswer
 

Bonjour à tous,
 
Je souhaiterais développer une appli windows sous linux.
Quelques explications:

  • L'appli, en C, est une utilisation simple de la dll de winrar (unrar.dll) fournie sur le site de rarlab. L'appli servira plus tard comme librairie pour du développement en Python.
  • La plateforme visée est windows puisque la fonction finale servira sur un système (XBMC) basée sur Win32.  
  • Linux, ... bon, simplement, je suis sur ubuntu


Pour compiler, j'ai installé mingw et wine pour les tests. J'ai suivi pour cela les infos de ce site: Cross-Compilation vers win32 et j'ai effectué les tests proposés et ça fonctionne impec.
 
J'ai donc fait un petit programme simple affichant la version de la bibliothèque de unrar. J'ai donc en fichiers:

  • la dll: unrar.dll
  • le .lib: unrar.lib
  • le .h: unrar.h
  • le .c: test.c


La compilation ne pose pas de problème mais vient au niveau du linkage.
 
Les commandes que j'utilise sont:

Code :
  1. i586-mingw32msvc-gcc -c test.c
  2. i586-mingw32msvc-gcc -L. -lunrar -otest.exe test.o


 
L'erreur que je reçois est une erreur de référence indéfinie sur la fonction tirée de la dll après la deuxième commande.
 
Mes autres essais:

  • passage d'un .lib à un .a en récupérant le .def lié à la dll et en utilisant le dlltool de mingw, mais j'ai la même erreur.
  • Compilation sous wine en installant sous wine mingw. "i586-mingw32msvc-gcc" devient "wine gcc": même erreur.
  • Utilisation de g++ à la place de gcc: même erreur.
  • Ce week end, j'ai eu accès à un pc équipé de windows, j'ai donc fait l'install de mingw, et là, j'ai eu aucun problème. J'ai eu mon exe nickel


Toute idée est la bienvenue.
 
Merci


Message édité par nioc_bertheloneum le 26-06-2007 à 21:24:22
mood
Publicité
Posté le 25-06-2007 à 22:23:10  profilanswer
 

n°1579603
nioc_berth​eloneum
Posté le 26-06-2007 à 21:23:30  profilanswer
 

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 :
  1. 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 :
  1. RARGetDllVersion   -->   RARGetDllVersion@0


Liste des fonctions avec extension

Code :
  1. RARCloseArchive@4
  2. RARGetDllVersion@0
  3. RAROpenArchiveEx@4
  4. RARProcessFile@16
  5. RARReadHeader@8
  6. RARReadHeaderEx@8
  7. RARSetCallback@12


  • créer la bibliothèque statique utilisable par le linker:
Code :
  1. 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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [Résolu] Cross-Compilation et DLL

 

Sujets relatifs
[Résolu] Attacher une librairie à un .exe[Résolu]Soucis avec la methode PAST
[Resolu] espace blanc entre le bord d'une image et la fenetre !PB a la compilation. (debutant inside)
[RESOLU] Je crois que c'est absolument incroyable, mais pas sûr...[Resolu] 1 erreur de validation XHTML 1.0
[Javascript - URGENT] traitement de chaine de caractère - Résolu[RESOLU]javascript + variable
[resolu]$_GET avec variable contenant des espaces[RESOLU] librairie C pour le buzzer pc ? fonction frequence ?
Plus de sujets relatifs à : [Résolu] Cross-Compilation et DLL


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR