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

Windows Discussion :

Création d'une dll : étape d'édition des liens


Sujet :

Windows

  1. #1
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut Création d'une dll : étape d'édition des liens
    Bonjour,

    Je suis en train de créer un système de plugin pour un logiciel, j'utilise donc, sous windows, des dll.

    Bizarrement lors de la compilation de celles-ci, gcc passe par l'étape d'édition. Bien évidement, j'obtiens des erreurs au niveau des fonctions de l'API de mon application puisque je fourni uniquement un fichier d'interface (les fichiers .h pour résumés).

    J'utilise waf comme système de compilation, voici la commande générée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc.exe default/plugins/todo/todo_1.o -o default/plugins/todo/libtodo.dll -shared -Lc:/codeblocks/mingw/lib -Wl,-Bdynamic -lgio-2.0 -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lintl -lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lpangowin32-1.0 -lgdi32 -lpangocairo-1.0 -lpango-1.0 -lcairo -lgtksourceview-2.0
    Sous linux j'ai sensiblement la même chose (ça fonctionne comme je le souhaite), excepté les options suivantes en plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    -Wl,-h,libtodo.so.0 -Wl,--export-dynamic
    J'ai loupé une étape, ou l'édition des liens des DLL n'est pas dynamique sous Windows ?

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    J'ai du mal à comprendre ce que tu dis.

    C'est à la compilation de l'EXE que tu as des erreurs ?
    Comment cherches-tu à utiliser la DLL ? Si c'est un système de plugin, le __declspec(dllimport) n'est pas fait pour toi: Tu dois utiliser LoadLibrary(), GetProcAddress() et des pointeurs de fonction...

  3. #3
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    C'est à la compilation de l'EXE que tu as des erreurs ?
    Non, le coeur de l'application compile sans soucis. Ce sont les dll qui font office de plugins.

    Citation Envoyé par Médinoc Voir le message
    Comment cherches-tu à utiliser la DLL ? Si c'est un système de plugin, le __declspec(dllimport) n'est pas fait pour toi: Tu dois utiliser LoadLibrary(), GetProcAddress() et des pointeurs de fonction...
    Je passe par la glib qui utilise bien LoadLibrary et GetProcAddress.

    Mon problème n'est pas lors de l'utilisation du plugin mais lors de sa compilation : pourquoi gcc effectue l'étape d'édition des liens, alors qu'ils sont censés être résolus lors de l'exécution ?

    [edit]Je n'ai pas ce genre de problème lorsque je créée une bibliothèque statique [/edit]

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Seules les libs statiques n'ont pas d'édition des liens: Elles ont seulement un rassemblement des morceaux.

    Les libs dynamiques sont des fichiers exécutables presque comme les autres: Ils ont des "ressources", et utilisent eux-mêmes des libs statiques. Il y a donc une édition de liens pour les DLLs. Si tu veux faire deux DLLs qui s'utilisent entre elles, il faut "tricher" : http://msdn.microsoft.com/en-us/libr...x6(VS.80).aspx

    Une DLL n'est pas supposée faire appel à des fonctions de l'EXE qui les utilise, à part en callback.
    Une lib statique non plus, d'ailleurs, sauf dans le cas de libs contenant leur propre "main"...

  5. #5
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Ok, ça dépasse ma logique mais si ça a été décidé ainsi, c'est qu'il doit y avoir une raison. Je vais donc séparer l'api du programme principal.

    Merci pour ton aide

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

Discussions similaires

  1. Problème d'édition des liens d'une DLL
    Par Mrblod dans le forum Qt Creator
    Réponses: 6
    Dernier message: 26/08/2011, 15h28
  2. création d'une dll avec des pointeurs en paramètre
    Par patoche.05 dans le forum Langage
    Réponses: 7
    Dernier message: 03/07/2010, 02h27
  3. [dll] pb à l'édition des liens
    Par poukill dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 05/05/2006, 09h56
  4. Conventions à utiliser pour la création d'une DLL
    Par Writer dans le forum Langage
    Réponses: 3
    Dernier message: 02/08/2005, 09h24
  5. Création d'une base de données contenant des images
    Par gandalf_le_blanc dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 16/06/2004, 15h29

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