"msvcrtd.lib" 링크시 문제


LNK4098: defaultlib "msvcrtd.lib" conflicts ...

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) 님

그랬군...

by 중원 | 2008/10/08 14:25 | PC programming | 트랙백 | 덧글(0)

트랙백 주소 : http://titan515.egloos.com/tb/2079690
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]

:         :

:

비공개 덧글

◀ 이전 페이지다음 페이지 ▶