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++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 106
    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 Expert
    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
    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 confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 106
    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
    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
    Par défaut
    Un .lib est inutilisable avec MinGW, si je me souviens bien.

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 106
    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 émérite
    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
    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

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