본문 바로가기

C..C++....

error LNK 2005 xxxx이(가) MSVCRT(D).lib 혹은 LIBCMT(D).lib 에 이미 정의되어 있습니다.. 오류날때 대처방법

 


error LNK2005: _printf이(가) MSVCRTD.lib(MSVCR100D.dll)에 이미 정의되어 있습니다. F:\Project\GGangster\GGangster\libcmtd.lib(printf.obj)
......
.....
수많은 오류가 나왔다..


이와 같은 설정의로 에러를 경고로 나오게끔 하는 방법이 있지만 
근본적인 해결방법도 아니고 수없이 많은 warning도 보기 좋지 않다..

일단 이 오류가 나오는 원인은


빨간 색 부분의 런타임 라이브러리때문에 생기는 문제이다...
프로젝트를 진행하다 보면 외부 라이브러리를 많이 사용하게 되는데. 외부 라이브러리는 MT(d)로 컴파일 되어있으나
내가 사용하는 프로젝트는 MD(d)로 되어 있으면 어김없이 LINK2005 오류가 발생하게 된다..

라이브러리에 대한 모든 소스가 다 있다면 런타임 라이브러리의 옵션을 MT(d)나 MD(d)로 모두 통일 하면 되지만
라이브러리에 대한 모든 소스가 존재 하지 않을때에는
아래와 같은 방법을 사용해야만 한다...


 사용할 런타임 라이브러리  무시해야 하는 라이브러리
  단일 스레드(libc.lib)  libcmt.lib, msvcrt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib
  다중 스레드(libcmt.lib)  libc.lib, msvcrt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib
  DLL을 사용하는 다중 스레드(msvcrt.lib)  libc.lib, libcmt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib
  디버그 단일 스레드(libcd.lib)  libc.lib, libcmt.lib, msvcrt.lib, libcmtd.lib, msvcrtd.lib
  디버그 다중 스레드(libcmtd.lib)  libc.lib, libcmt.lib, msvcrt.lib, libcd.lib, msvcrtd.lib
  DLL을 사용하는 디버그 다중 스레드(msvcrtd.lib)  libc.lib, libcmt.lib, msvcrt.lib, libcd.lib, libcmtd.lib


자신의 프로젝트의 옵션에 따라서
특정 기본 라이브러리 무시.. 요기에다가 적어주면 된다!!..


출처
http://msdn.microsoft.com/ko-kr/library/6wtdswk0(v=VS.100).aspx
http://msdn.microsoft.com/ko-kr/library/abx4dbyh(v=VS.100).aspx
크롬에서는 링크가 잘되는데.. IE에서는 안되네요 -ㅅ-;;
주소 복사하시면 됨니다..