Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 13 sur 13
  1. #1
    Nouveau Membre du Club
    Inscrit en
    mars 2009
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : mars 2009
    Messages : 102
    Points : 27
    Points
    27

    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 :
    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 :
    1
    2
    3
    4
    5
    class B {
    B();
    B1();
    B2();
    }

  2. #2
    Expert Confirmé
    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 555
    Points
    2 555

    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 :
    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
    Nouveau Membre du Club
    Inscrit en
    mars 2009
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : mars 2009
    Messages : 102
    Points : 27
    Points
    27

    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 émérite

    Homme Profil pro Léo Gaspard
    Étudiant
    Inscrit en
    janvier 2012
    Messages
    442
    Détails du profil
    Informations personnelles :
    Nom : Homme Léo Gaspard
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : janvier 2012
    Messages : 442
    Points : 891
    Points
    891

    Par défaut

    Un .lib est inutilisable avec MinGW, si je me souviens bien.

  5. #5
    Nouveau Membre du Club
    Inscrit en
    mars 2009
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : mars 2009
    Messages : 102
    Points : 27
    Points
    27

    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 chevronné
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mars 2009
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : mars 2009
    Messages : 400
    Points : 710
    Points
    710

    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
    Nouveau Membre du Club
    Inscrit en
    mars 2009
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : mars 2009
    Messages : 102
    Points : 27
    Points
    27

    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 Loïc Joly
    Développeur informatique
    Inscrit en
    août 2004
    Messages
    4 873
    Détails du profil
    Informations personnelles :
    Nom : Homme Loïc Joly
    Âge : 39
    Localisation : France

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

    Informations forums :
    Inscription : août 2004
    Messages : 4 873
    Points : 10 717
    Points
    10 717

    Par défaut

    Et si tu compilais ton code avec visual studio (la même version que celle qu'a utilisé la bibliothèque) ?

  9. #9
    Nouveau Membre du Club
    Inscrit en
    mars 2009
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : mars 2009
    Messages : 102
    Points : 27
    Points
    27

    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 Loïc Joly
    Développeur informatique
    Inscrit en
    août 2004
    Messages
    4 873
    Détails du profil
    Informations personnelles :
    Nom : Homme Loïc Joly
    Âge : 39
    Localisation : France

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

    Informations forums :
    Inscription : août 2004
    Messages : 4 873
    Points : 10 717
    Points
    10 717

    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.

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

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

    Informations forums :
    Inscription : mars 2009
    Messages : 400
    Points : 710
    Points
    710

    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
    Nouveau Membre du Club
    Inscrit en
    mars 2009
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : mars 2009
    Messages : 102
    Points : 27
    Points
    27

    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 Loïc Joly
    Développeur informatique
    Inscrit en
    août 2004
    Messages
    4 873
    Détails du profil
    Informations personnelles :
    Nom : Homme Loïc Joly
    Âge : 39
    Localisation : France

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

    Informations forums :
    Inscription : août 2004
    Messages : 4 873
    Points : 10 717
    Points
    10 717

    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •