IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

Cross-Compilation et DLL


Sujet :

Linux

  1. #1
    Candidat au Club
    Inscrit en
    Juin 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Cross-Compilation et DLL
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    i586-mingw32msvc-gcc -c test.c
    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

  2. #2
    Candidat au Club
    Inscrit en
    Juin 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut tout est une histoire de déclaration
    Salut à tous, et surtout aux 15 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:


    Après cela j'ai compilé normalement et ça a fonctionné impec.

    ++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 17/12/2008, 02h01
  2. Cross-compil pour MAC
    Par Ulmo dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 29/09/2006, 19h49
  3. [VB] COmment compiler une dll dans un exe (zlib.dll)
    Par Khrysby dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 01/11/2005, 12h10
  4. cross compilation
    Par jowy dans le forum C++Builder
    Réponses: 11
    Dernier message: 26/08/2005, 16h23
  5. compilation .lib .dll
    Par thierry31 dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 01/04/2005, 11h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo