2011/06/13 - [C..C++....] - error LNK 2005 xxxx이(가) MSVCRT(D).lib 혹은 LIBCMT(D).lib 에 이미 정의되어 있습니다.. 오류날때 대처방법 |
MSVCPRT(d).LiB나 LIBCPMT(d).LIB 도 위에 나온 글과 같은 세팅문제로 생기는 문제입니다..
MSVCRT.LIB나 LIBCMT.LIB는 C Run-Time Libaray(CRT)에 관련된 파일이고
MSVCPRT(d).LiB나 LIBCPMT(d).LIB는 Standard C++ Libaray로 인해 생기는 문제입니다..
이러한 문제가 생기는 원인을 간략히 설명하자면..
msvcrt 같은경우는 c 에서 사용하던 함수
예를들어 printf로 설명을 드리면
printf함수 하나를 가지고 총 6가지의 라이브러리를 만들게 됨니다.(vs2005이상에서는 4개)
싱글쓰레드,다중쓰레드,다중쓰레드 DLL, 여기에 디버그 버전까지 총 6개가 만들어지는데..
외부 라이브러리에서는 다중쓰레드로 컴프알 되었으면 그곳에서 printf는 libcmt.lib로 컴파일 되었고.
내가 사용하는 라이브러리는 다중쓰레드dll로 사용되었다면 내 프로젝트는 msvcrt.lib로 사용하게 됨니다..
그러면 libcmt.lib msvcrt.lib가 서로 printf를 가지고 있으므로 중복에러가 발생하게 되는것이지요...
msvcprt.lib나 libcpmt.lib같은 경우엔 printf가 아니라 c++함수인 cout같은게 서로 중복되어서 생기는 문제이고요..
http://msdn.microsoft.com/ko-kr/library/abx4dbyh(v=VS.100).aspx
이곳에 가시면 더욱더 자세한 정보를 얻으실수 있습니다..
프로젝트 세팅하실때 다중쓰레드를 사용중이시라면(릴리즈기준.. 디버그는 끝에 D만 붙여주면됨)
링크->입력->특정 기본라이브러리 무시 이곳에 msvcrt.lib;msvcprt.lib를 적어주시면 되고.
다중쓰레드 dll일경우엔 libcmt.lib;libcpmt.lib를 적어주시면 됨니다.
프로젝트가 다중 스레드인지 다중스레드 DLL인지 확인하는 방법은
속성->C/C++ -> 코드 생성 -> 런타임 라이브러리에서 확인하시면 됨니다.
'C..C++....' 카테고리의 다른 글
Console 윈도우에서 종료버튼 disable시키기. (0) | 2011.10.18 |
---|---|
BoostPool 사용하기.. (0) | 2011.08.25 |
문자열 사용.. (0) | 2011.07.06 |
람다(Lambda) 활용하기.! (0) | 2011.06.27 |
c/c++에서 문자열 인코딩 변환! 유니코드 멀티바이트 UTF-8 쉽게 변환해보자~! (5) | 2011.06.17 |