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 C++ Discussion :

Pourquoi ne me génère-t-il pas le .lib?


Sujet :

Visual C++

Vue hybride

r0d Pourquoi ne me génère-t-il... 17/11/2009, 12h41
camboui Aucune idée, juste des... 17/11/2009, 14h15
3DArchi Salut, Le seul cas dont je... 17/11/2009, 14h27
r0d rôôô, j'ai trouvé le... 17/11/2009, 15h39
3DArchi Je pense que c'est ce que je... 17/11/2009, 16h36
Mac LAK Par défaut, cette définition... 17/11/2009, 20h15
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    r0d
    r0d est actuellement connecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 290
    Billets dans le blog
    2
    Par défaut Pourquoi ne me génère-t-il pas le .lib?
    Bonjour à tous,

    En près de 10 ans d'utilisation de VS, c'est la première fois que je vois cela, et vraiment ça me dépasse:
    Dans une solution, j'ai 2 projets. Le premier est compilé en tant que dll qui va être utilisée par le second. Normalement, et jusqu'à hier, lorsque je compilais le premier, il me générait un .dll et un .lib. J'ai dû modifier quelque chose (bien que je ne crois pas avoir modifié quoi que ce soit mais je ne crois plus au code qui se modifie tout seul), et maintenant il ne me génère que la dll. Or le second projet a besoin du .lib pour linker.

    J'ai fais mille fois le tour de mes options de compilation, et tout me semble nickel. Par exemple, dans linker -> avanced -> import lib, j'ai même mis le chemin en dur (c:/path/sans/espaces/malib.lib).

    Avez vous une idée, un indice, sur ce qu'il peut se passer?

    edit: il s'agit de visual 9 (ou visual 2008) pro SP1, sous windows XP

  2. #2
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Par défaut
    Aucune idée, juste des pistes.
    Regarde mon sujet "runtime error avant main" d'il y a quelques jours dans ce même forum.
    Un collègue a eu une blague du genre quelques semaines plus tôt (voir KB971090).

    En bref, MS fait des patchs parfois déroutants.
    Essaie en faisant un "rebuild all", en effaçant tous les répertoires release et debug, etc. Bien que je suppose que tu aies déjà essayé tout cela.

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    Le seul cas dont je me souvienne est la création d'une DLL dans laquelle aucun symbole n'était exporté : ni fonction, ni classe. Alors, la DLL est bien créée mais pas de .lib.

  4. #4
    r0d
    r0d est actuellement connecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 290
    Billets dans le blog
    2
    Par défaut
    rôôô, j'ai trouvé le problème. En récupérant une ancienne version et en comparant les options de compilations, et le problème venait d'une variable de précompilation que j'avais enlevé. Je l'avais enlevé car je ne savais pas à quoi elle servait (et je ne le sais toujours pas d'ailleurs, je vais chercher ça tout de suite). La variable est de cette forme: __EXPORT_MON_PROJET_DLL__
    Et effectivement, si cette variable n'est pas définie, le .lib n'est pas généré. Je ne sais pas d'où vient cette variable (c'est un projet que j'ai récupéré "en route"), et elle n'est utilisée nulle part dans le code.
    C'est ce qui m'ennuie un peu parfois dans Visual, il fait trop de choses "dans notre dos".

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Je pense que c'est ce que je disais : tu n'avais aucun symbole exporté. La macro __EXPORT_MON_PROJET_DLL__ est souvent employée pour différencier le header selon qu'on génère la DLL ou qu'on importe l'interface de la DLL dans un projet. C'est en général quelque chose qui ressemble à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #ifdef EXPORTER
    #define __EXPORT_MON_PROJET_DLL__ __declspec(dllexport)
    #else
    #define __EXPORT_MON_PROJET_DLL__ __declspec(dllimport)
    #endif
    et ensuite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class __EXPORT_MON_PROJET_DLL__ blabla{
    // ...
    };
    __EXPORT_MON_PROJET_DLL__ void __cdecl re_blablabla();
    La définition des macros de type __EXPORT_MON_PROJET_DLL__ peut plus ou moins varier selon les configurations gérées ou les compilateurs pris en compte, mais on retrouve toujours au - une définition avec dllexport et une avec dllimport pour visual.

  6. #6
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Par défaut, cette définition de préprocesseur s'appelle <NOMDUPROJET>_EXPORTS, et la macro d'exportation / importation à insérer dans le code s'appelle <NOMDUPROJET>_API. Par habitude, je ne change jamais ces noms par défaut de façon à garder une cohérence générale entre mes projets.

    Si la macro est absente, ça ne produit en général que des emm.... : soit tu ne génères que la DLL (avec une erreur de link derrière), soit que la librairie d'importation (avec une belle erreur à l'exécution bien sûr).
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

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

Discussions similaires

  1. [ADO.Net][OleDb] Pourquoi ma requête access ne fonctionne pas?
    Par Bapt.ice dans le forum Accès aux données
    Réponses: 6
    Dernier message: 05/05/2006, 17h19
  2. Pourquoi n'y à t'il pas de rubrique Windev sur www.developpez.com ?
    Par TicTacToe dans le forum Evolutions du club
    Réponses: 12
    Dernier message: 21/04/2006, 17h44
  3. Pourquoi rand()%N n'est il pas équiprobable?
    Par Pragmateek dans le forum C++
    Réponses: 12
    Dernier message: 22/03/2006, 23h37
  4. [XML/XSL]Le page générée ne correspond pas à mon fichier XSL
    Par JavaEli dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 16/11/2005, 04h16

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