[Error/Warning] warning LNK4098
저장소/VC++프로젝트 속성 중 RunTime Library를 다중 스레드 DLL(Multi Thread DLL)(/MD)로 변경할 경우
msvctr Library를 사용하게 된다.
이럴 경우 기본으로 사용되는 libcmt Library(다중 스레스(Multi Thread)(/MT)) 와 충돌을 일으켜 경고를 발생한다.
해결 방법으로는 프로젝트 속성 페이지의 명령줄에 /NODEFAULTLIB:libcmt.lib 를 추가하거나
특정 라이브러리 무시 항목에 libcmt.lib 를 추가하고 다시 빌드하면 된다.
MSDN에서 퍼온 아래의 내용도 참고하자.
[자료 출처]
MSDN http://msdn.microsoft.com/ko-kr/library/6wtdswk0(VS.80).aspx
링커 도구 경고 LNK4098
오류 메시지
'library' defaultlib가 다른 라이브러리와 충돌합니다. /NODEFAULTLIB:library를 사용하십시오.defaultlib 'library' conflicts with use of other libs; use /NODEFAULTLIB:library
호환되지 않는 라이브러리에 링크하려고 했습니다.
참고 |
---|
런타임 라이브러리에는 여러 형식이 혼합 사용되지 않도록 하는 지시문이 들어 있는데 여러 형식이나 디버그/비디버그 버전의 런타임 라이브러리를 동일한 프로그램에서 사용하려고 하면 이 경고가 발생합니다. 예를 들어, 어떤 종류의 런타임 라이브러리를 사용하는 파일을 컴파일하고 다른 종류의 런타임 라이브러리를 사용하는 파일을 컴파일한 다음(예: 단일 스레드 라이브러리와 다중 스레드 라이브러리) 이 둘을 링크시키려고 하면 이 경고가 발생합니다. 동일한 런타임 라이브러리를 사용하는 소스 파일을 컴파일해야 합니다. 자세한 내용은 런타임 라이브러리 사용(/MD, /MT, /LD) 컴파일러 옵션을 참조하십시오. |
링커의 /VERBOSE:LIB 스위치를 사용하여 링커가 검색 중인 라이브러리를 확인할 수 있습니다. 예를 들어, LNK4098이 발생하여 단일 스레드된 비디버그 런타임 라이브러리를 사용하는 실행 파일을 만들려는 경우에는 /VERBOSE:LIB 옵션을 사용하여 링커에서 검색 중인 라이브러리를 확인하십시오. 링커는 검색한 라이브러리로 LIBC.lib를 출력하며 LIBCMT.lib, MSVCRT.lib, LIBCD.lib, LIBCMTD.lib 또는 MSVCRTD.lib는 출력하지 않습니다. 무시할 각 라이브러리에 대해 /NODEFAULTLIB를 사용하여 링커가 잘못된 런타임 라이브러리를 무시하도록 할 수 있습니다.
다음 표는 사용할 런타임 라이브러리에 따라 무시해야 하는 라이브러리를 보여 줍니다.
사용할 런타임 라이브러리 | 무시해야 하는 라이브러리 |
---|---|
단일 스레드(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 |
예를 들어, 이 경고가 발생한 경우와 비디버그, 단일 스레드 버전의 런타임 라이브러리를 사용하는 실행 파일을 만들려는 경우에는 링커에 다음 옵션을 사용하면 됩니다.
'저장소 > VC++' 카테고리의 다른 글
[펌] MFC 헤더와 라이브러리 설명 (0) | 2009.09.10 |
---|---|
[Error/Warning] 빌드할 때 문제가 발생했다면 여기로! (0) | 2009.08.21 |
[C++] DLL에서 메모리 할당, 외부에서 해제 (0) | 2009.08.20 |
[C++] CRT Debug Heap(Memory Leak 확인 방법) (0) | 2009.08.20 |
SQLite - 쿼리 실행 (0) | 2009.08.19 |