C Run-Time Library는 standard library를 말합니다.
printf, strcpy, malloc, new, cin, cout 등등이 이 라이브러리에 포함됩니다.
종류는 꽤 많은데, 별로 복잡하지는 않습니다.
libc.lib : c언어에 해당하는 라이브러리 입니다. printf, strcpy, malloc 등이 구현되어 있습니다.
libcmt.lib : libc 와 동일합니다만, 이것은 멀티쓰레드 용입니다.
msvcrt.lib : libc 와 동일합니다만, 이것은 dll 용입니다.
( 위의 두가지는 static link 로 사용되고, 이것은 dynamic link 로 사용됩니다.)
libcp.lib : c++언어에 해당하는 라이브러리 입니다. cin, cout, new 등이 구현되어 있습니다.
libcpmt.lib : libcp 와 동일합니다만, 이것은 멀티쓰레드 용입니다.
msvcprt.lib : libcp 와 동일합니다만, 이것은 dll 용입니다.
( 위의 두가지는 static link 로 사용되고, 이것은 dynamic link 로 사용됩니다.)
그러므로, 위의 라이브러리는 두개의 그룹중에 하나씩만 포함이 되어야 합니다.
만약, libc 와 msvcrt 가 둘다 링크되면 중복선언 되었다는 에러가 납니다.
하지만, 다른 프로젝트에서 가지고 왔다면, 이러한 링크옵션 수정하는 것이 쉽지 않을 수 있습니다.
프로젝트 구조를 보아야 알 수 있으나, 한가지 해결방법은....
링크에서 메세지에도 나와 있듯이, 링크 옵션에 다음을 추가 하십시오.
/NODEFAULTLIB:
library
library 에 포함시키지 말아야 할 라이브러리를 추가하시면, 이 라이브러리는 링크에 포함되지 않습니다.
그러면, 중복 선언 에러는 해결 할 수 있습니다.
출처 : Devpia / VC++ / 질문답변 / 572567
작성자 : 김무석(kim790815) 님