libcmtd.lib LNK2005 - 중복 선언 에러
- DevelopNow/errorLog
- 2008. 10. 10.
libcmtd.lib LNK2005 - 중복 선언 에러 | 니가 C 맛을 알아? | 2005/12/12 14:27 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
http://blog.naver.com/pro301/50000207598 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* LIBCMTD.lib 중복 선언에러(LNK2005) : CRT (* 표준 C/C++ 런타임 라이브러리 참조) 에러원인 : 에러메시지 : 해결방법 : .NET : Linker -> Input 메뉴에서 IgnoreSpecific Library에 libcmtd.lib 입력
MSDN 이나 일반적인 해결방법은 위와 같다.... 하지만, 프로젝트 옵션을 써서 극복하려는 시도는 궁극적인 해결 방법은 아닌 것 같다.
대개 위와 같은 링크에러는 여러개의 라이브러리가 포함된 프로젝트에서 발견된다. 그 문제가 아니라면 관련글[http://blog.naver.com/post/postList.jsp?blogId=pro301&categoryNo=4&cpage=9&viewdate=]의 순서에 따라 해결 하면 될 것이다.
주 프로젝트에 디펜던시로 묶인 프로젝트들이 모두 동일한 dll사용옵션을 사용했는가 이다. .NET 에서는 프로젝트 속성 - MFC 사용 부분에서 사용될 라이브러리에서는 [공유 dll 사용]옵션을 선택한 상태에서,
Release모드의 사용 라이브러리도 모두 [정적 라이브러리 사용]으로 바꾼 후 빌드하면 LNK2005는 발생하지 않는다.
1) .NET C++ : 프로젝트속성(Alt+P,P) - 일반 - MFC 사용 => [정적 라이브러리 사용] 출처 : 한국마이크로 소프트 기술지원
CRT(C 런타임) 라이브러리와 MFC(Microsoft Foundation Class) 라이브러리가 잘못된 순서로 링크되면 다음과 비슷한 LNK2005 오류가 발생할 수 있습니다.
nafxcwd.lib(afxmem.obj) : 오류 LNK2005:
"void * __cdecl operator new(unsigned int)"(??2@YAPAXI@Z)이(가) LIBCMTD.lib(new.obj)에 이미 정의되어 있습니다. nafxcwd.lib(afxmem.obj) : 오류 LNK2005:
"void __cdecl operator delete(void *)"(??3@YAXPAX@Z)이(가) LIBCMTD.lib(dbgnew.obj)에 이미 정의되어 있습니다. nafxcwd.lib(afxmem.obj) : 오류 LNK2005:
"void * __cdecl operator new(unsigned int,int,char const *,int)" (??2@YAPAXIHPBDH@Z)이(가) LIBCMTD.lib(dbgnew.obj)에 이미 정의되어 있습니다. mfcs40d.lib(dllmodul.obj): 오류 LNK2005: _DllMain@12이(가)
MSVCRTD.LIB (dllmain.obj)에 이미 정의되어 있습니다. mfcs42d.lib(dllmodul.obj): 오류 LNK2005: _DllMain@12이(가) msvcrtd.lib(dllmain.obj)에 이미 정의되어 있습니다. 원인CRT 라이브러리는 new, delete 및 DllMain 함수에 대해 약한 외부 링크를 사용합니다. MFC 라이브러리에도 new, delete 및 DllMain 함수가 포함되어 있어 CRT 라이브러리 전에 MFC를 링크해야 합니다.
해결 방법 이 문제를 해결할 수 있는 방법에는 두 가지가 있습니다. 첫 번째 해결 방법은 링커가 올바른 순서로 라이브러리를 강제 링크하도록 하는 것입니다. 두 번째 해결 방법은 문제를 일으키는 모듈을 찾아 해결하는 것입니다.
해결 방법 1: 링커가 올바른 순서로 라이브러리를 강제 링크하는 방법
해결 방법 2: 문제 모듈을 찾아 해결하는 방법다음 단계를 수행하여 현재 라이브러리 링크 순서를 확인합니다.
현재 상태이것은 의도적으로 설계된 동작입니다.
추가 정보MFC 라이브러리를 사용할 때는 MFC 라이브러리가 CRT 라이브러리 전에 링크되도록 해야 합니다. 이렇게 하려면 프로젝트에 있는 모든 파일이 직접(#include <Afx.h>) 또는 간접(#include <Stdafx.h>)적으로 먼저 Msdev\Mfc\Include\Afx.h를 포함하도록 합니다. Afx.h 포함 파일은 #pragma 주석(lib,"<libname>") 지시어를 사용하여 라이브러리의 순서를 올바르게 조정합니다. 원본 파일 확장명이 .c이거나 파일 확장명이 .cpp이지만 MFC를 사용하지 않는 경우 모듈 맨 위에 작은 헤더 파일(Forcelib.h)을 만들어 포함시킬 수 있습니다. 이 새로운 헤더가 라이브러리 검색 순서를 올바르게 합니다. Visual C++에는 이 헤더 파일이 들어 있지 않지만 다음 단계를 수행하여 이 파일을 쉽게 만들 수 있습니다.
Microsoft 제품 관련 기술 전문가들과 온라인으로 정보를 교환하시려면 Microsoft 뉴스 그룹에 참여하시기 바랍니다. 본 문서의 정보는 다음의 제품에 적용됩니다.
|
'DevelopNow > errorLog' 카테고리의 다른 글
Adobe CS4 License에러 (licensing for this product has expired) (0) | 2009.02.18 |
---|---|
No error No warring! (0) | 2008.10.17 |
warning LNK4099 (0) | 2008.10.10 |
warning C4996: deprecated... (0) | 2008.10.10 |
Visual Studio 2005 Warnning Function( deprecated ) (0) | 2008.10.10 |