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

Bibliothèques C++ Discussion :

re-utiliser une librairie compilée


Sujet :

Bibliothèques C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 106
    Points : 63
    Points
    63
    Par défaut re-utiliser une librairie compilée
    Bonjour,

    On m'a passé une librairie (projet visual studio) que je veux réutiliser dans mon projet Qt (compilé avec MingW/gcc).

    Le problème c'est que le header principal du projet inclus plein de trucs spécifiques à visual studio, donc inutilisable tel quel dans mon projet Qt.

    -Est-ce que je peux créer mon propre header "clean" pour mon projet Qt en déclarant uniquement les fonctions dont j'ai besoin dans le .lib, sans que ca pose de problème ?

    -Est-ce que le fait que la librairie soit compilé sous visual studio va poser problème avec MingW (différentes conventions de nommage ?) Si oui, y a til moyen de contourner ce probleme ?

    Merci !

    header source:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #include <trucsinutiles>
    #include <trucsspecifiquesVS>
     
    A();
     
    class B {
    B();
    B1();
    B2();
    }
     
    class C {
    C();
    C1();
    C2();
    }
     
    D();
    header souhaité:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class B {
    B();
    B1();
    B2();
    }

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2011
    Messages
    1 255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 255
    Points : 2 627
    Points
    2 627
    Par défaut
    Ah !!! Le mythe du "re-use" !!!!

    Tu peux donner des exemples de nom de header ?

    En général, ce n'est pas des header spécifique à Visual mais spécifique à Windows (et son SDK).

    Tu vas sûrement devoir faire l'équivalent d'un programme multi plateformes. Ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #ifdef WIN32
    #include <winsock.h>
    #else
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    ...
    #endif

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 106
    Points : 63
    Points
    63
    Par défaut
    Ce sont en effet des headers du Platform SDK Windows, qui n'existent pas dans le systeme Qt/MingW (je ne me rappelle pas précisement, il y en a une dizaine, mais "strsafe.h" pour n'en citer qu'un).

    Le truc c'est que ces header windows ne sont pas utiles pour la déclaration de la classe "B" qui m'interesse. Du coup je me demande si dans Qt je peux juste créer un header vierge et recopier la déclaration de la classe B, en linkant dans les paramètres projet avec le .lib compilé par visual studio (meme si ce .lib inclus plus de trucs que juste la classe B).

  4. #4
    Membre éclairé
    Avatar de Ekleog
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Points : 879
    Points
    879
    Par défaut
    Un .lib est inutilisable avec MinGW, si je me souviens bien.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 106
    Points : 63
    Points
    63
    Par défaut
    Pas vrai, j'utilise des .lib externe dans mon projet Qt/MinGW (OpenAL en l'occurence); dans le .pro tu rajoute LIBS += mylibrary.lib

    Sinon quelqu'un a un avis sur la question ? Je pensais que c'était un problème basique...

  6. #6
    Membre éprouvé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Points : 1 060
    Points
    1 060
    Par défaut
    Bonsoir,

    Il faut bien noter qu'il y a deux types de .lib :
    - Ceux qui permettent de se lier à une DLL (~code objet de la bibliothèque)
    - Ceux qui correspondent à une bibliothèque statique (~point d'entrée de la DLL)

    Si à la rigueur MinGW peut s'en sortir avec le premier type, ça me semble compromis pour le second (en particulier si c'est du C++ et pas du C).

    Ensuite, ça n'est pas un problème basique, quand une bibliothèque dépend d'un compilateur par les bibliothèques qui l'accompagne, il peut être difficile de l'utiliser avec un autre compilateur.

    Je te conseillerais la méthode mala92 (mais avec des #ifdef _MSC_VER car MinGW définit WIN32 de mémoire) ou la ré-écriture sur la base de fonctions standards ou bibliothèques multi-plateforme (Qt, boost par exemple).

    Après, certaines bibliothèques sont tellement peu pensées en multi-plateforme qu'il vaut mieux les laisser profiter des avantages certains de strsafe.h et autres cadeaux empoisonnés dans leurs tombeaux...

    Bye

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 106
    Points : 63
    Points
    63
    Par défaut
    Mince, je pensais que c'était un problème beaucoup plus simple que ça
    Merci pour la réponse en tout cas !
    En tout cas impossible que je puisse me passer de cette librairie, va falloir que je trouve un workaround...

  8. #8
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Et si tu compilais ton code avec visual studio (la même version que celle qu'a utilisé la bibliothèque) ?
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 106
    Points : 63
    Points
    63
    Par défaut
    Pas envisageable, c'est un projet Qt Creator multiplateforme (win/mac) de plusieurs dizaine de milliers de lignes...
    Au pire je vais faire un .exe VS pour interfacer la librairie avec mon projet via des lignes de commande, si je trouve pas de vrai workaround :S

  10. #10
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    La dernière fois que j'avais regardé, Qt compilait très bien avec visual studio. Il suffirait juste de modifier l'appel de qmake pour lui demander de générer des fichiers de compilation pour ce compilateur.

    Je ne suggère pas de modifier le code, juste la manière de le compiler.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  11. #11
    Membre éprouvé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Points : 1 060
    Points
    1 060
    Par défaut
    Citation Envoyé par divide Voir le message
    Pas envisageable, c'est un projet Qt Creator multiplateforme (win/mac) de plusieurs dizaine de milliers de lignes...
    Au pire je vais faire un .exe VS pour interfacer la librairie avec mon projet via des lignes de commande, si je trouve pas de vrai workaround :S
    Et ta fameuse bibliothèque non portable, tu en as besoin que sous windows?

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 106
    Points : 63
    Points
    63
    Par défaut
    JolyLoic: je comprend que tu me propose cette solution, mais je ne peux vraiment pas me permetttre de changer tout le systeme de compilation maintenant, c'est vraiment un gros projet qui utilise des directives de compilation gcc, il a été validé par le QA et il est sur le point d'être release après 2 ans de développement.
    Pour tout dire, la librairie que je dois intégrer est une librairie annexe de mon éditeur; ca ne fait donc pas partie du coeur de l'appli, je prefere donc trouver un workaround sur cette librairie plutot que sur mon projet.

    bretus: cette librairie compile egalement sur mac avec xcode; mais la je ne me fais pas trop de soucis, il me semble que Qt Creator sur mac utilise aussi le compilateur de xcode.

    En regardant plus attentivement le header principal de cette librairie, je vois que la classe qui m'interesse a été copié deux fois: une fois comme une classe C++, une autre fois comme une classe C (extern "C" { ... }).
    Vous pensez que la classe C du .lib peut etre lu par MinGW ?

  13. #13
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    C'est une lib statique ou dynamique ?

    Si c'est une lib dynamique, l'interface C doit être portable. Si c'est une lib statique, tu peux la wrapper dans une lib dynamique (gérée avec visual C++) qui expose une interface en C. Vue la nature de la lib, cette interface devrait ne pas être trop grosse.

    Par contre, ce n'est pas hyper sécurisé, tout le monde pouvant remplacer la DLL par une autre qui répond en permanence "ok, tout est bon". Ça ne demande plus aucun talent de désassemblage.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

Discussions similaires

  1. Utiliser une librairie de classes compilée
    Par mithrendil dans le forum C#
    Réponses: 3
    Dernier message: 18/10/2008, 16h49
  2. Utiliser une librairie license LGPL
    Par Elbarto dans le forum Licences
    Réponses: 1
    Dernier message: 12/11/2005, 22h58
  3. Utiliser une librairie
    Par BugFactory dans le forum API standards et tierces
    Réponses: 7
    Dernier message: 11/10/2005, 16h24
  4. Creer et utiliser une librairie externe à l'exécutable
    Par multani dans le forum Autres éditeurs
    Réponses: 7
    Dernier message: 06/11/2003, 10h11
  5. Utiliser une librairie graphique
    Par Troopers dans le forum Linux
    Réponses: 6
    Dernier message: 22/08/2003, 11h22

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