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

MinGW Discussion :

Compilation mingw librairie dynamique


Sujet :

MinGW

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2006
    Messages : 134
    Points : 61
    Points
    61
    Par défaut Compilation mingw librairie dynamique
    Bonjour, j'essaye de compiler avec mingw un exécutable qui doit se linker avec une .dll elle aussi compiler avec mingw. Mon problème est que dans mon dossier ou je vais chercher ma librairie, contient à la fois libMALIB.a statique et libMALIB.dll dynamique. Par défaut le linker de mingw ld prend en priorité la librairie statique .a d'après une doc redhat http://www.redhat.com/docs/manuals/e...ker/win32.html pour résoudre ce problème il suffit de faire un lien symbolique vers ma librairie dynamique en l'appelant"-lC:\cheminversmalib\ libMALIB.dll" .a. Sur ma machine j'ai uniquement cygwin d'installer en aucun cas je ne peut installer msys (de mingw). C'est avec lui que j'essaye de faire des liens symbolique sur mes librairies " ln -s libMALIB.dll libMALIB.dll.a". Au final mon programme ce est compile mais il prend ma libMALIB.dll comme une librairie statique . oui oui Sa devient compliquer et très bizarre tout sa. Enfin tout sa pour dire que je n'ai absolument pas le même résultat que si dans mon répertoire je n'avais que ma librairie dynamique. J'ai essaye de mettre en dure le chemin vers ma librairie dynamique"-lC:\cheminversmalib\libMALIB.dll" avec tout les variantes possible \ et / préfixer avec lib ou pas etc... ld ne veut rien savoir et me retourne une erreur.

    Ma question est comment fait ton pour linker avec mingw une librairie dynamique -lMALIB sachant que mon dossier qui contient ma lib "-LC:\..\laouestmalib" contient à la fois libMALIB.a et libMALIB.dll et que je ne soit pas obliger de supprimer ma statique libMALIB.a.

    Un grand merci à la personne par avance qui résoudra mon problème qui est tout bête mais bien embêtant quand même.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 217
    Points : 228
    Points
    228
    Par défaut
    T'es sur que libMALIB.a est pas la bibliothèque d'import de libMALIB.dll?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 49
    Points : 53
    Points
    53
    Par défaut
    je n'ai pas la réponse directe mais ...

    * je croyais que c'était l'inverse : recherche de .dll avant .a
    (moi je suis sous cygwin avec comme cible mingw)

    * des options du linker qui pourraient peut être t'aider
    gcc ... -Wl,-t,--verbose

    collect2 va afficher tous les fichiers qu'il essaie d'ouvrir, tu vas donc voir précisément où il recherche *MALIB*

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Points : 1 069
    Points
    1 069
    Par défaut
    Si les conventions sont respectées,
    • libMALIB.a est une librairie statique
    • libMALIB.dll est une librairie dynamique mais comme sous Visual elle ne permet pas de linker
    • libMALIB.dll.a est la librairie d'importation pour la DLL libMALIB.dll


    Il est donc normal que tu n'arrives pas à linker contre libMALIB.dll. N'as-tu pas un libMALIB.dll.a sous le coude ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2006
    Messages : 134
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par khazna Voir le message
    T'es sur que libMALIB.a est pas la bibliothèque d'import de libMALIB.dll?
    Je suis sur que libMALIB.a est une lib satique fait avec ar.exe de mingw/bin et libMALIB.dll est une librairie dynamique fait avec mingw32-g++.exe -SHARED.
    J'ai juste une même librairie que je compile en statique et en dynamique

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2006
    Messages : 134
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par aoyou Voir le message
    Si les conventions sont respectées,
    • libMALIB.a est une librairie statique
    • libMALIB.dll est une librairie dynamique mais comme sous Visual elle ne permet pas de linker
    • libMALIB.dll.a est la librairie d'importation pour la DLL libMALIB.dll


    Il est donc normal que tu n'arrives pas à linker contre libMALIB.dll. N'as-tu pas un libMALIB.dll.a sous le coude ?
    chez moi j'ai d'après la doc de redhat libMALIB.dll.a est chez moi un lien symbolique et je fait bien un ln -s de ma librairie libMALIB.dll pour faire libMALIB.dll.a. Cette astuce est sensé faire passé les .dll avant les .a du link.

    Je rappelle que lorsque dans mon dossier il n'y a que mon libMALIB.dll je link comme une librairie dynamique tout ce qui y a de plus normal. Si j'ai libMALIB.a et libMALIB.dll dans le même dossier, libMALIB.a sera utiliser pour linker au lieu que libMALIB.dll.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2006
    Messages : 134
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par pfxxx Voir le message
    je n'ai pas la réponse directe mais ...

    * je croyais que c'était l'inverse : recherche de .dll avant .a
    (moi je suis sous cygwin avec comme cible mingw)

    * des options du linker qui pourraient peut être t'aider
    gcc ... -Wl,-t,--verbose

    collect2 va afficher tous les fichiers qu'il essaie d'ouvrir, tu vas donc voir précisément où il recherche *MALIB*
    j'ai fait un test en ajoutant -Wl,-t,--verbose comme option. Je confirme le link avec la lib statique plutôt que la dynamique lorsque libMALIB.dll.a (lien symbolique) est présent dans le même dossier que libMALIB.a libMALIB.dll.

    j'en profite pour citer "ld.exe: mode i386pe"
    et aussi "gcc version 3.4.5 (mingw-vista special r3)" bizarre non je suis sous xp sp3

Discussions similaires

  1. Librairie dynamique OCR
    Par spaceclic dans le forum Autres éditeurs
    Réponses: 7
    Dernier message: 22/02/2007, 18h30
  2. [Kylix] Librairies dynamiques et Kylix C++
    Par Mitchou dans le forum EDI
    Réponses: 2
    Dernier message: 03/12/2004, 12h46
  3. Compiler et créer une librairie dynamique en C
    Par fidififouille dans le forum Linux
    Réponses: 3
    Dernier message: 30/11/2004, 16h36
  4. création d'une librairie dynamique
    Par bilo2000 dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 26/08/2004, 15h17
  5. Librairies dynamique sous AIX en C++ : MaLib.so
    Par didierM dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 23/10/2003, 18h19

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