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

Qt Discussion :

Création de DLL


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Avril 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 47
    Par défaut Création de DLL
    Bonjour à toutes et tous,

    ayant rejoint une équipe où un certain nombre de développements ont été réalisés, j'ai en charge de diviser le code en plusieurs bibliothèques réexploitables.
    Le découpage a été pensé, ça c'est OK, mais la je galère un peu avec Qt pour obtenir une dll (certaines bibliothèques sont vouées à être statiques - notamment car elles vont être linkées avec des applis temps réel -, et d'autres dynamiques, car sans contraintes particulières).
    J'ai donc deux grandes questions :
    1) si je génère une bibliothèque statique libA.a, et qu'ensuite une bibliothèque B l'utilise, est-il possible que B soit dynamique ?

    2) impossible de générer seulement une bibliothèque avec Qt, si je mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    TEMPLATE = lib
    CONFIG += staticlib
    TARGET = A
    ....
    dans libA.pro, j'obtiens bien libA.a après un qmake et g++

    Par contre, lorsque je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    TEMPLATE = lib
    CONFIG += dll
    TARGET = A
    ....
    dans ce cas là la compilation me donne libA.a et A.dll ??? (alors que je m'attendais à avoir libA.dll seulement...)

    Quelqu'un aurait une explication ???

    Merci d'avance pour vos réponses.

  2. #2
    Rédacteur

    Avatar de johnlamericain
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    3 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 3 742
    Par défaut
    Citation Envoyé par Jeromnimo Voir le message
    1) si je génère une bibliothèque statique libA.a, et qu'ensuite une bibliothèque B l'utilise, est-il possible que B soit dynamique ?
    Bien sur, et heureusement

    Citation Envoyé par Jeromnimo Voir le message
    2) impossible de générer seulement une bibliothèque avec Qt, si je mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    TEMPLATE = lib
    CONFIG += staticlib
    TARGET = A
    ....
    dans libA.pro, j'obtiens bien libA.a après un qmake et g++

    Par contre, lorsque je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    TEMPLATE = lib
    CONFIG += dll
    TARGET = A
    ....
    dans ce cas là la compilation me donne libA.a et A.dll ??? (alors que je m'attendais à avoir libA.dll seulement...)

    Quelqu'un aurait une explication ???
    De mémoire, en dynamique, Qt génère à la fois le .a et le .dll (dans ton cas) mais ce n'est pas gênant, tu peux utiliser le fichier qui t'intéresse uniquement, à savoir le .dll. Il n'y a pas de lien fort entre le .a et le .dll.

  3. #3
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    26 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2008
    Messages : 26 772
    Par défaut
    Citation Envoyé par johnlamericain Voir le message
    De mémoire, en dynamique, Qt génère à la fois le .a et le .dll (dans ton cas) mais ce n'est pas gênant, tu peux utiliser le fichier qui t'intéresse uniquement, à savoir le .dll. Il n'y a pas de lien fort entre le .a et le .dll.
    Qt utilise un compilateur. Tu lui demandes de faire une lib, donc un fichier DLL. Or, le compilateur ne peut pas utiliser firectement une DLL (notamment en mode débug, lil y stocke pas mal d'infos inutiles dans le binaire de la DLL). Donc, il crée un fichier qui lui permet de savoir ce qu'il veut savoir sur la DLL. Notamment, les fonctions disponibles à l'import, qui peuvent être définies dans un .def. Cependant, il ne les aime pas trop, car il ne peut pas y stocker exactement tout ce dont il a besoin. Il a donc recours aux fichiers .lib / .a pour stocker les fonctions disponibles, le fichier dans lequel elles sont disponibles, et bien d'autres.

    En gros, le fichier .a dit au compilo ce qu'il peut trouver dans le .dll, et ne regardera même pas le .dll. Il ne sera chargé qu'à l'exécution, pas avant (on n'a pas besoin du code binaire avant).

    Dans le cas d'une lib statique, les deux fichiers sont combinés en un seul, le .lib / .a contenant tout : la liste des méthodes et leur implémentation.
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  4. #4
    Membre averti
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Avril 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 47
    Par défaut
    Merci beaucoup de toutes vos réponses, je comprends mieux maintenant
    Par contre c'est quand même bizarre la gestion du nom du .a et du .dll généré (l'un se voit préfixé de lib et l'autre non...)
    Je vais vérifier si le comportement est le même sous linux.

    Merci encore.

  5. #5
    Rédacteur

    Avatar de johnlamericain
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    3 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 3 742
    Par défaut
    Citation Envoyé par Jeromnimo Voir le message
    Merci beaucoup de toutes vos réponses, je comprends mieux maintenant
    Par contre c'est quand même bizarre la gestion du nom du .a et du .dll généré (l'un se voit préfixé de lib et l'autre non...)
    Je vais vérifier si le comportement est le même sous linux.

    Merci encore.
    Non, c'est tout à fait normal, c'est la convention de nommage.

  6. #6
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    26 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2008
    Messages : 26 772
    Par défaut
    Citation Envoyé par Jeromnimo Voir le message
    Par contre c'est quand même bizarre la gestion du nom du .a et du .dll généré (l'un se voit préfixé de lib et l'autre non...)
    Je vais vérifier si le comportement est le même sous linux.
    Ils en ont décidé ainsi, tu ne les feras pas changer d'avis. Le comportement sera strictement identique tant que tu utiliseras GCC et ce qui va avec. Quand tu changeras de compilateur, alors tu verras la magie des conventions changer : pour VS, par exemple, rien du tout comme préfixe. Le fichier .lib (équivalent .a) a donc exactement le même nom que la DLL, sauf exceptions (tu peux changer le nom du .lib sans problème, pas de la DLL).

    Fais attention avec GCC : même si le ficheir est préfixé de lib, il ne faut pas le mettre quand tu le passes au compilateur. C'est toujours un -ltoto pour lier contre libtoto.a (et toto.so à l'exécution).
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

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

Discussions similaires

  1. Création de DLL
    Par croc14 dans le forum MFC
    Réponses: 45
    Dernier message: 14/06/2006, 11h57
  2. Fichier XML -> Création de DLL
    Par Nounours666 dans le forum Langage
    Réponses: 11
    Dernier message: 19/11/2005, 18h36
  3. Problème création de DLL avec CString
    Par loupdeau dans le forum MFC
    Réponses: 3
    Dernier message: 21/07/2005, 20h55
  4. Création de DLL
    Par J. dans le forum Windows
    Réponses: 2
    Dernier message: 24/08/2004, 11h59
  5. Problème création de DLL
    Par monsieur.voie.lactee dans le forum C++Builder
    Réponses: 4
    Dernier message: 12/08/2003, 16h56

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