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

Visual Studio Discussion :

lib et dll VC++


Sujet :

Visual Studio

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Décembre 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2009
    Messages : 102
    Points : 66
    Points
    66
    Par défaut lib et dll VC++
    Bonjour,

    Mon but ultime est de générer des dll utilisables.

    Je développe pour différents OS (principalement QNX) et voudrait générer des dll sous Windows comme je génère des .so ou .dll sur mon os cible. Donc j'ai cherché comment avec VS 2008 Express je pouvait faire cela. Ok si je passe par le wizard je pense que tout va bien se passer mais comme j'ai environ 35 projets divers à "porter" je passe pas par ce chemin mais je génère les .vcproj à la main (enfin presque). J'arrive à builder un projet en une dll. Et je trouve bien le fichier .dll là ou il doit être. Mais pas de .lib donc je peut pas les utiliser par la suite.

    J'ai bien cherché dans les FAQ et via GOOGLE mais rien de bien passionnant, que des trucs qui sortent pas vraiment des sentiers battus (Wizard à 99%). En plus comme le source est multi-plate forme et que je dois respecter des règles de programmation je n'ai pas vraiment le droit de tout surcharger avec des DLLEXPORT ou autre. Le code doit être partagé et sans trop de conditionnel (#if ....).

    Bref je ne sais pas si je me suis bien exprimé mais si vous comprenez mon problème et que vous avez une solution ou au moins une piste n'hesitez pas à me répondre.

    Merci

  2. #2
    Membre éprouvé
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Points : 1 179
    Points
    1 179
    Par défaut
    Bonjour,

    Generalement, le .lib qui va avec la dll est généré dans le meme répertoire que la dll. si ce n'est pas le cas c'est que tu as du modifier dans le vcproj une ligne qui redirige le fichier generé ailleurs... tente une recherche par exemple, ou vérifie ligne par ligne ton vcproj (depuis la fenetre de propriété c'est plus lisible)

    Derniere solution : fait toi un projet bidon qui genere une dll. vérifie que tu as bien le .lib avec. compare le projet avec les tiens pour voir où sont les différences...
    "le langage C permet de tout faire, y compris se tirer dans le pied. Le langage C++ permet de tout faire, y compris se tirer dans le pied - et réutiliser la balle"

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Décembre 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2009
    Messages : 102
    Points : 66
    Points
    66
    Par défaut
    Bonjour,

    Merci pour ton aide.
    J'ai effectivement creer un projet dll bidon hier pour comprendre. Et j'ai compris (enfin je pense). Il est obligatoire de faire preceder (au moins à la declaration) le nom de la fonction avec __declspec(dllexport) ce qui est une originalité windowsienne. Ca ne me parait pas trés propre mais bon si c'est comme ça ....

    Bref comme je suis motivé j'ai modifié mes .h avec une macro supplementaire du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #if WIN32
    #define EXPORTASLIB __declspec(dllexport)
    #else
    #define EXPORTASLIB
    #endif
    Ca me permet de limiter les #if .... à un seul fichier, c'est moins pire qu'autre chose mais je suis pas super satisfait alors si vous avez mieux je suis preneur.

    Bref à priori j'ai maintenant un .lib mais c'est bizzare pour certains modules le fichier dll est aussi gros que le lib.

    Merci

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 81
    Points : 65
    Points
    65
    Par défaut
    Salut sybe30,

    Je rencontre exactement le même problème que toi. J'essaie de créer une dll à partir de plusieurs classes en C++ et la compilation fonctionne parfaitement et n'aboutit que sur la création du fichier .dll, aucun .lib n'est créé ! Donc ensuite impossible de compiler correctement l'executable car je récupère toujours une erreur de link qui me dit qu'il ne peut pas ouvrir le .lib

    Sous linux aucun souci étant donné que seul un .so est nécessaire et qu'il ne semble pas y avoir de notions d'importation/exportation de fonctions/classes ?

    Pour revenir à Windows, après plusieurs recherches, il semble qu'il n'y ait que 2 solutions dépendant de la méthode de link employée :
    - implicit linking : besoin d'un .lib donc il faut spécifier quelles fonctions sont exportées avec __declspec(dllexport). C'est lourd et pas portable.
    - explicit linking : pas besoin du .lib. On utilise LoadLibrary dans l'executable pour charger la dll. L'avantage est que çà ne modifie pas la bilbiothèque d'origine. C'est la même quelque soit l'OS. Par contre gros inconvénient, c'est que çà modifie le code de l'executable et dans mon cas précis, la bilbiothèque est fourni comme un SDK donc çà ne simplifie pas le travail de l'utilisateur final.

    voir pour plus de détails :
    http://msdn.microsoft.com/en-us/library/9yd93633.aspx

    Bref pas de solutions miracles, si qqun en connait une je suis preneur.

    Sinon peut-être une piste à explorer, c'est l'utilisation de bibliothèque tierce pour gérer ce détail. Perso, j'utilise déjà Qt pour la création de plugins. C'est complètement transparent pour l'utilisateur. Je vais peut-être m'orienter vers cette solution mais je comprends bien que ce n'est pas possible pour tous les projets.

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

Discussions similaires

  1. Compiler .lib en Dll
    Par lemagicien dans le forum Visual C++
    Réponses: 1
    Dernier message: 23/03/2010, 10h36
  2. [PHP 5.2] Extension php_mbstring.dll :: lib ieshims.dll manquante
    Par Fred_Bogota dans le forum Langage
    Réponses: 2
    Dernier message: 30/09/2009, 21h22
  3. msvcprtd.lib(MSVCP90D.dll) : error LNK2005
    Par PoseurDeQuestion dans le forum Visual C++
    Réponses: 1
    Dernier message: 15/02/2009, 11h51
  4. compilation d'1 lib numérique en .LIB et .DLL
    Par olivier57b dans le forum Visual C++
    Réponses: 0
    Dernier message: 01/09/2008, 15h35
  5. Différences entre .lib et .dll
    Par oodini dans le forum Windows
    Réponses: 3
    Dernier message: 05/12/2006, 18h12

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