정리

error LNK2005 - uafxcw.lib, LIBCMT.lib

저장소/VC++


다음과 같은 문제가 발생.


1>uafxcw.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z)이(가) LIBCMT.lib(new.obj)에 이미 정의되어 있습니다.

1>uafxcw.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z)이(가) LIBCMT.lib(delete.obj)에 이미 정의되어 있습니다.


C Runtime Library와 MFC Library의 import 순서에 의한 링크시 오류라고 한다.

일단 해결 방법은 다음과 같이 하여 import 순서를 변경해주면 되겠다.


프로젝트 속성 -> 링커 -> 입력 -> 특정 기본 라이브러리 무시 : uafxcwd.lib; libcmtd.lib

프로젝트 속성 -> 링커 -> 입력 -> 추가 종속성 : uafxcwd.lib; libcmtd.lib


링크 옵션 /verbose:lib 를 통해 설정 전후의 Library Import 순서를 확인할 수 있다.

설정 전
1>  라이브러리를 검색하고 있습니다.
1>      C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\LIBCMTD.lib 검색 중:
1>      C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\OLDNAMES.lib 검색 중:
1>      C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\atlmfc\lib\uafxcwd.lib 검색 중:
1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z)이(가) LIBCMTD.lib(new.obj)에 이미 정의되어 있습니다.
1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z)이(가) LIBCMTD.lib(dbgdel.obj)에 이미 정의되어 있습니다.
1>      C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\kernel32.lib 검색 중:
...

설정 후
1>  라이브러리를 검색하고 있습니다.
1>      C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\atlmfc\lib\uafxcwd.lib 검색 중:
1>      C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\libcmtd.lib 검색 중:
1>      C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\OLDNAMES.lib 검색 중:
1>      C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\kernel32.lib 검색 중:


그러하다!