[디버깅] LNK2005 에러의 예와 그 대처법
Posted 2007/05/27 15:26, Filed under: Code Factory저같은 경우는 디버그모드 에서 릴리즈 모드로 변경시킬때,
다음과 같이 라이브러리 중첩 에러가 발생했습니다.
LIBCD.lib(asin.obj) : error LNK2005: _asin already defined in msvcrtd.lib(MSVCRTD.dll)
Project -> Setting -> Link탭에서
Ignore all default libraries 옵션을 적용시켜서 해결 했습니다.

* LIBCMTD.lib 중복 선언에러(LNK2005) : CRT (* 표준 C/C++ 런타임 라이브러리 참조)
에러원인 :
CRT 라이브러리가 MFC 라이브러리 전에 링크되면 LNK2005 오류가 발생한다.
MFC나 VC관련 라이브러리와 동일한 함수가 CRT에도 존재하기 때문에 발생되는 에러이다.
에러메시지 :
nafxcwd.lib(afxmem.obj) : 오류 LNK2005:"void * __cdecl operator new(unsigned int)"(??2@YAPAXI@Z)이(가) LIBCMTD.lib(new.obj)에 이미 정의되어 있습니다.
해결방법 :
CRT 라이브러리 링크 무시.
VC98 : Project -> Setting 메뉴에 Link탭에서 프로젝트 옵션에 /nodefaultlib:"libcmtd.lib" 를 아무데나 삽입
.NET : Linker -> Input 메뉴에서 IgnoreSpecific Library에 libcmtd.lib 입력
링커 명령줄은 /NOD:libcmtd.lib 명령과 동일
링크 순서를 확인하는 방법 :
1. Project 메뉴에서 Settings을 눌러 Project Settings 대화 상자를 엽니다.
2. Settings For 뷰에서 링크 오류가 발생하는 프로젝트 구성을 선택(강조 표시)합니다.
3. Link 탭을 누릅니다.
4. Project Options 대화 상자에 다음을 입력합니다. /verbose:lib
5. 프로젝트를 다시 빌드. 링크하는 과정에서 출력 창에 라이브러리가 표시됩니다.
참고 싸이트 : www.naver.com
환경 : XP pro, Visual C++ 6.0
