-
erreur de link
bonjour,
j'ai fait une librairie statique avec visual c++, et lorsque je veux utiliser celle ci dans un projet, le simple fait d'inclure un .h de ma librairie engendre plein d'erreurs :
msvcrtd.lib(MSVCRTD.dll) : error LNK2005: __setmbcp already defined in LIBCD.lib(mbctype.obj)
nafxcwd.lib(afxmem.obj) : error LNK2005: "public: static void __stdcall CObject::operator delete(void *)" (??3CObject@@SGXPAX@Z) already defined in mfc42d.lib(MFC42D.DLL)
nafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) already defined in LIBCD.lib(new.obj)
nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in LIBCD.lib(dbgdel.obj)
nafxcwd.lib(thrdcore.obj) : error LNK2005: "public: virtual void __thiscall CWinThread::Delete(void)" (?Delete@CWinThread@@UAEXXZ) already defined in mfc42d.lib(MFC42D.DLL)
nafxcwd.lib(thrdcore.obj) : error LNK2005: "public: virtual int __thiscall CWinThread::IsIdleMessage(struct tagMSG *)" (?IsIdleMessage@CWinThread@@UAEHPAUtagMSG@@@Z) already defined in mfc42d.lib(MFC42D.DLL)
nafxcwd.lib(thrdcore.obj) : error LNK2005: "public: virtual int __thiscall CWinThread::PreTranslateMessage(struct tagMSG *)" (?PreTranslateMessage@CWinThread@@UAEHPAUtagMSG@@@Z) already defined in mfc42d.lib(MFC42D.DLL)
nafxcwd.lib(thrdcore.obj) : error LNK2005: "public: virtual int __thiscall CWinThread::ProcessMessageFilter(int,struct tagMSG *)" (?ProcessMessageFilter@CWinThread@@UAEHHPAUtagMSG@@@Z) already defined in mfc42d.lib(MFC42D.DLL)
nafxcwd.lib(thrdcore.obj) : error LNK2005: "public: virtual class CWnd * __thiscall CWinThread::GetMainWnd(void)" (?GetMainWnd@CWinThread@@UAEPAVCWnd@@XZ) already defined in mfc42d.lib(MFC42D.DLL)
nafxcwd.lib(thrdcore.obj) : error LNK2005: "public: virtual int __thiscall CWinThread::PumpMessage(void)" (?PumpMessage@CWinThread@@UAEHXZ) already defined in mfc42d.lib(MFC42D.DLL)
nafxcwd.lib(afxinl1.obj) : error LNK2005: "public: virtual void __thiscall CObject::Serialize(class CArchive &)" (?Serialize@CObject@@UAEXAAVCArchive@@@Z) already defined in mfc42d.lib(MFC42D.DLL)
nafxcwd.lib(afxinl1.obj) : error LNK2005: "public: __thiscall CString::CString(void)" (??0CString@@QAE@XZ) already defined in mfc42d.lib(MFC42D.DLL)
nafxcwd.lib(afxinl1.obj) : error LNK2005: "public: int __thiscall CString::GetLength(void)const " (?GetLength@CString@@QBEHXZ) already defined in mfc42d.lib(MFC42D.DLL)
nafxcwd.lib(afxinl1.obj) : error LNK2005: "public: __thiscall CString::operator char const *(void)const " (??BCString@@QBEPBDXZ) already defined in mfc42d.lib(MFC42D.DLL)
nafxcwd.lib(afxinl1.obj) : error LNK2005: "public: char __thiscall CString::operator[](int)const " (??ACString@@QBEDH@Z) already defined in mfc42d.lib(MFC42D.DLL)
....
Est ce que quelqu'un saurait de quoi ca peut venir?
merci
-
une erreur de link est très souvent du à une librairie manquante !
rajoute dans les propriété de ton projet, le fichier librairie manquant et tu ne devrais pu avoir de problèmes.
-
j'ai déjà rajouté toutes les librairies dont j'ai besoin à mon projet. Après avoir recompilé chacune de mes librairies et mon projet avec Use run-time library = Debug Multithreaded,
il me reste les erreurs suivantes :
Linking...
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(dbgdel.obj)
-
j'ai résolu ce problème, il fallait rajouter /FORCE:MULTIPLE dans les options de compilation
http://msdn.microsoft.com/library/de...ml/LNK2005.asp
-
le pb est de savoir si toutes les librairies utilisées sont en multi-thread .
ce genre de pb arrive aussi si il y a melange mono et multi-thread.
:D
-
j'ai tout mis en multi-thread et ca a l'air de marcher
-
Excellent !! c'est exactement ce sur quoi je me prends la tete depuis des heures !