링커 도구 경고 LNK4098
defaultlib 'library'가 다른 라이브러리 사용과 충돌합니다. /NODEFAULTLIB:library 사용
호환되지 않는 라이브러리와 연결하려고 합니다.
참고 항목
이제 런타임 라이브러리에는 다양한 형식이 혼합되지 않도록 하는 지시문이 포함되어 있습니다. 동일한 프로그램에서 다른 형식 또는 디버그 및 비 디버그 버전의 런타임 라이브러리를 사용하려고 하면 이 경고가 표시됩니다. 예를 들어 한 종류의 런타임 라이브러리와 다른 종류의 파일을 사용하여 다른 종류(예: 디버그 및 소매)를 사용하도록 한 파일을 컴파일하고 연결하려고 하면 이 경고가 표시됩니다. 동일한 런타임 라이브러리를 사용하려면 모든 원본 파일을 컴파일해야 합니다. 자세한 내용은 /MD, /MT, /LD(런타임 라이브러리 사용) 컴파일러 옵션을 참조하세요.
링커의 /VERBOSE:LIB 스위치를 사용하여 링커가 검색하는 라이브러리를 확인할 수 있습니다. 예를 들어 실행 파일에서 다중 스레드 비 디버그 런타임 라이브러리를 사용하는 경우 보고된 목록에는 LIBCMTD.lib, MSVCRT.lib 또는 MSVCRTD.lib가 아닌 LIBCMT.lib가 포함되어야 합니다. 무시하려는 각 라이브러리에 대해 /NODEFAULTLIB를 사용하여 잘못된 런타임 라이브러리를 무시하도록 링커에 지시할 수 있습니다.
아래 표에서는 사용하려는 런타임 라이브러리에 따라 무시해야 하는 라이브러리를 보여줍니다. 명령줄에서 무시할 각 라이브러리에 대해 하나의 /NODEFAULTLIB 옵션을 사용합니다. Visual Studio IDE에서 특정 기본 라이브러리 무시 속성에서 세미콜론으로 무시하도록 라이브러리를 구분합니다 .
이 런타임 라이브러리를 사용하려면 | 이러한 라이브러리 무시 |
---|---|
다중 스레드(libcmt.lib) | msvcrt.lib; libcmtd.lib; msvcrtd.lib |
DLL을 사용하여 다중 스레드(msvcrt.lib) | libcmt.lib; libcmtd.lib; msvcrtd.lib |
다중 스레드 디버그(libcmtd.lib) | libcmt.lib; msvcrt.lib; msvcrtd.lib |
DLL을 사용하여 다중 스레드 디버그(msvcrtd.lib) | libcmt.lib; msvcrt.lib; libcmtd.lib |
예를 들어 이 경고를 수신하고 런타임 라이브러리의 디버그가 아닌 DLL 버전을 사용하는 실행 파일을 만들려는 경우 링커와 함께 다음 옵션을 사용할 수 있습니다.
/NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:libcmtd.lib /NODEFAULTLIB:msvcrtd.lib