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

MFC Discussion :

[MFC ]Probleme de linkage d'une dll


Sujet :

MFC

  1. #1
    Membre averti
    Inscrit en
    Septembre 2002
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 26
    Par défaut [MFC ]Probleme de linkage d'une dll
    Bonjour,

    Je developpe une dll qui linke dynamiquement les MFC. Dans projet/Setting/Link/Input j'ignore la librairie suivante : libcmtd.lib
    Je travaille comme ca plusieurs jours, tout va bien ca compile. Mais depuis hier, j ai le message suivant :
    "Linking...
    mfcs42d.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in MSVCRTD.lib(dllmain.obj)
    mfcs42d.lib(dllmodul.obj) : warning LNK4006: _DllMain@12 already defined in MSVCRTD.lib(dllmain.obj); second definition ignored
    Creating library Debug/GeneratorWordDocument.lib and object Debug/GeneratorWordDocument.exp
    ../bin/Debug/GeneratorWordDocument.dll : fatal error LNK1169: one or more multiply defined symbols found
    Error executing link.exe."
    Hier, j ai re-cree un projet avec les memes setting et le meme code, ca a fonctionner mais le message revient.
    Avez vous une idee ?
    Merci beaucoup
    Lysis

  2. #2
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2002
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2002
    Messages : 106
    Par défaut
    salut,
    dans les cas là, la première chose que je fais et de faire un Rebuild All pour tout recompiler, souvent l'erreur vient de là.

    Sinon, va voir sur MSDN à la page sur LNK2005, il donne plusieurs cas possibles qui peuvent provoquer cette erreur (comme inclure des librairies correspondant au multithread et aux simgle), ça devrait pouvoir t'aider.

    Désolé de pas pouvoir en faire plus mais ce genre d'erreur est pas facile à corriger sans connaitre le programme vu qu'elles proviennent souvent de librairies que l'on programme soit même.

    Bonne chance

  3. #3
    Membre averti
    Inscrit en
    Septembre 2002
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 26
    Par défaut
    Merci,

    J'ai rebuilde la dll 6fois, j'ai meme redemarrer la machine et re-builder encore ( on sait jamais ). L'erreur revient.
    J'ai suivi les solutions proposees par le site de microsoft, ca ne change rien. J'exclut deja libcmtd.lib et ca devrait suffir. D'ailleur, quand je re-cree un projet avec les meme setting et le meme code ca refonctionne..... Je ne comprend vraiment pas.
    Une idee ?

    Lysis.

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut ,la question de base pourquoi tu ignores libcmtd.lib ?
    est ce que pour les <> modules linker en debug et release tu changes le nom ?
    exemple mylilbd.lib pour debug et Mylib.lib pour release sinon suivant comment tu à parametrer la recherche des .lib dans l'ide tu peux avoir un melange des genres release/debug au fil des <> link etc...
    c'est une idee comme ça à toi de verifier.

  5. #5
    Membre averti
    Inscrit en
    Septembre 2002
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 26
    Par défaut
    > la question de base pourquoi tu ignores libcmtd.lib ?
    Pour ne pas avoir cette erreur en principe. Quand j'ai commence le projet, j ai cette erreur tout le temps. J'avais ete voir sur le site de microsoft, qui explique que cela provient d'un conflit quand on importe des librairies MFC qui font la meme chose. Dans ce cas, il y a conflit et on doit en ignorer une (enfin si j'ai bien compris). Maintenant, c'est comme si libcmtd.lib n'etait plus ignoree.

    est ce que pour les <> modules linker en debug et release tu changes le nom ?
    Nop, je change pas les noms.

  6. #6
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    donc tu ne changes pas les noms et dans tes chemins de recherche des lib tu
    a le chemin pour le debug et release pour les modules à linker avec ta dll.?
    si c'est ça je te conseille de faire l'essai suivant renommer manuellement tes lib debub en rajoutant un d pour debug dans les noms .
    et dans ta dll d'apporter la meme modif et voir si le pb persiste.


  7. #7
    Membre averti
    Inscrit en
    Septembre 2002
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 26
    Par défaut
    ca change rien ....

  8. #8
    Membre averti
    Inscrit en
    Septembre 2002
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 26
    Par défaut
    En mode verbose:Lib
    j'obtiens les message suivant :

    Linking...
    Searching Libraries
    Searching ../Framework/Debug\Framework.lib:
    Searching \Xerum\Framework\Debug\Framework.lib:
    Searching ../Stl/lib\sxlrtd.lib:
    Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\msvcprtd.lib:
    Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\MSVCRTD.lib:
    Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\OLDNAMES.lib:
    Searching C:\Program Files\Microsoft Visual Studio\VC98\MFC\LIB\mfc42d.lib:
    Searching C:\Program Files\Microsoft Visual Studio\VC98\MFC\LIB\mfcs42d.lib:
    mfcs42d.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in MSVCRTD.lib(dllmain.obj)
    Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\kernel32.lib:
    Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\user32.lib: ....

    Avez vous une idee ?

  9. #9
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    le pb est evoque sur MSDN
    PRB: LNK2005 Errors When Link C Run-Time Libraries Are Linked Before MFC Libraries
    Q148652
    --------------------------------------------------------------------------------
    The information in this article applies to:
    Microsoft Visual C++, versions 4.0, 4.1
    Microsoft Visual C++, 32-bit Enterprise Edition, versions 5.0, 6.0
    Microsoft Visual C++, 32-bit Professional Edition, versions 5.0, 6.0
    Microsoft Visual C++, 32-bit Learning Edition, version 6.0
    --------------------------------------------------------------------------------
    SYMPTOMS
    When the C Run-Time (CRT) library and Microsoft Foundation Class (MFC) libraries are linked in the wrong order, LNK2005 errors similar to the following may occur:
    nafxcwd.lib(afxmem.obj) : error LNK2005:
    "void * __cdecl operator new(unsigned int)"(??2@YAPAXI@Z) already
    defined in LIBCMTD.lib(new.obj)
    nafxcwd.lib(afxmem.obj) : error LNK2005:
    "void __cdecl operator delete(void *)"(??3@YAXPAX@Z) already defined
    in LIBCMTD.lib(dbgnew.obj)
    nafxcwd.lib(afxmem.obj) : error LNK2005:
    "void * __cdecl operator new(unsigned int,int,char const *,int)"
    (??2@YAPAXIHPBDH@Z) already defined in LIBCMTD.lib(dbgnew.obj)
    mfcs40d.lib(dllmodul.obj): error LNK2005: _DllMain@12 already defined in
    MSVCRTD.LIB (dllmain.obj)
    mfcs42d.lib(dllmodul.obj): error LNK2005: _DllMain@12 already defined in
    msvcrtd.lib(dllmain.obj)
    CAUSE
    The CRT libraries use weak external linkage for the new, delete, and DllMain functions. The MFC libraries also contain new, delete, and DllMain functions, which requires MFC to be linked before the CRT libraries.

    RESOLUTION
    There are two ways to resolve this problem. The first solution involves forcing the linker to link the libraries in the correct order. The second solution allows you to find the module that is causing the problem and correct it.

    Solution One: Force Linker to Link Libraries in Correct Order
    Open the Project Settings dialog box by clicking Settings on the Build menu.
    In the Settings For view, click to select (highlight) the project configuration that is getting the link errors.
    Click the Link tab.
    Click to select INPUT in the Category combo box.

    In the Libraries to Ignore edit box, insert the library names (for example, Nafxcwd.lib Libcmtd.lib).
    NOTE: The linker command-line equivalent in /NOD:<library name>.
    In the Object/library Modules edit box, insert the library names. You must ensure that these are listed in order and as the first two libraries in the line (for example, Nafxcwd.lib Libcmtd.lib).

    Solution Two: Locate and Correct the Problem Module
    Perform the following steps to view the current library link order:

    Open the Project Settings dialog box by clicking Settings on the Build menu.
    In the Settings For view, click to select (highlight) the project configuration that is getting the link errors.
    Click the Link tab.
    Type the following in the Project Options dialog box:
    /verbose:lib
    Rebuild your project. The libraries will be listed in the output window during the linking process.

    STATUS
    This behavior is by design.
    MORE INFORMATION
    When you use the MFC libraries, you must make sure they are linked before the CRT library. This can be done by ensuring that every file in your project includes Msdev\Mfc\Include\Afx.h first, either directly (#include <Afx.h>) or indirectly (#include <Stdafx.h>). The Afx.h include file forces the correct order of the libraries, by using the #pragma comment (lib,"<libname>") directive.

    If the source file has a .c extension, or the file has a .cpp extension but does not use MFC, you can create and include a small header file (Forcelib.h) at the top of the module. This new header ensures the correct library search order.

    Visual C++ does not contain this header file, but you can easily create this file by performing the following steps:

    Open Msdev\Mfc\Include\Afx.h.
    Select the lines between #ifndef _AFX_NOFORCE_LIBS and #endif //!_AFX_NOFORCE_LIBS.
    Copy the selection to the Windows Clipboard.
    Create a new text file.
    Paste the contents of the Clipboard into this new file.
    Save the file as Msdev\Mfc\Include\Forcelib.h.

  10. #10
    Membre averti
    Inscrit en
    Septembre 2002
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 26
    Par défaut
    Merci beaucoup. C'est comme ca que j'avai trouve la premier fois qu'elle librairie je devais ignorer. jai deja essaye les 3 solutions proposees.... Rien ne fontionne. J ai toujours le meme message d'erreur.
    En plus ma deadline c'est demain

Discussions similaires

  1. Probleme de linkage d'une dll
    Par sociopath dans le forum Langage
    Réponses: 2
    Dernier message: 22/06/2009, 23h50
  2. [MFC]Probleme avec attributs d'une LOGFONT
    Par Fildz dans le forum MFC
    Réponses: 3
    Dernier message: 08/01/2006, 17h59
  3. probleme de debug d'une dll sur pc 64bits
    Par giova_fr dans le forum MFC
    Réponses: 2
    Dernier message: 12/12/2005, 16h40
  4. [MFC] Probleme d'actualisation d'une listbox
    Par Robleplongeur dans le forum MFC
    Réponses: 5
    Dernier message: 13/05/2004, 14h15
  5. [MFC] probleme de rafraichissement d'une image
    Par Vestaproman dans le forum MFC
    Réponses: 6
    Dernier message: 09/01/2004, 23h59

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