Share via


링커 도구 오류 LNK2038

'name'에 대해 검색된 불일치: 'value_1' 값이 filename.obj의 'value_2' 값과 일치하지 않습니다.

링커에서 기호 불일치가 검색되었습니다. 이 오류는 앱이 연결하는 라이브러리 또는 기타 개체 코드를 포함하여 앱의 여러 부분에서 기호의 충돌 정의를 사용한다는 것을 나타냅니다. 불일치 검색 pragma는 이러한 기호를 정의하고 충돌하는 값을 검색하는 데 사용됩니다.

가능한 원인 및 솔루션

이 오류는 프로젝트의 개체 파일이 오래된 경우에 발생할 수 있습니다. 이 오류에 대해 다른 솔루션을 시도하기 전에 개체 파일이 최신 상태이도록 깨끗한 빌드를 수행합니다.

Visual Studio는 런타임 오류 또는 기타 예기치 않은 동작을 일으킬 수 있는 호환할 수 없는 코드 링크를 방지하기 위해 다음과 같은 기호를 정의합니다.

  • _MSC_VER 앱 또는 라이브러리를 빌드하는 데 사용되는 MSVC(Microsoft C++ 컴파일러)의 주 버전 및 부 버전 번호를 나타냅니다. MSVC의 한 버전을 사용하여 컴파일된 코드는 주 버전과 부 버전 번호가 다른 버전을 사용하여 컴파일된 코드와 호환되지 않습니다. 자세한 내용은 미리 정의된 매크로를 참조 _MSC_VER 하세요.

    사용 중인 MSVC 버전과 호환되지 않는 라이브러리에 연결하고 호환되는 버전의 라이브러리를 획득하거나 빌드할 수 없는 경우 이전 버전의 컴파일러를 사용하여 프로젝트를 빌드할 수 있습니다. 프로젝트의 Platform Toolset 속성을 이전 도구 집합으로 변경합니다. 자세한 내용은 방법: 대상 프레임워크 및 플랫폼 도구 집합 수정을 참조하세요.

  • _ITERATOR_DEBUG_LEVEL C++ 표준 라이브러리에서 사용하도록 설정된 보안 및 디버깅 기능의 수준을 나타냅니다. 이러한 기능은 특정 C++ 표준 라이브러리 개체의 표현을 변경할 수 있으며, 그 결과 다른 보안 및 디버깅 기능을 사용하는 개체와 호환되지 않을 수 있습니다. 자세한 내용은 _ITERATOR_DEBUG_LEVEL을 참조하세요.

  • RuntimeLibrary 앱 또는 라이브러리에서 사용하는 C++ 표준 라이브러리 및 C 런타임의 버전을 나타냅니다. C++ 표준 라이브러리 또는 C 런타임 버전 중 하나를 사용하는 코드는 다른 버전을 사용하는 코드와 호환되지 않습니다. 자세한 내용은 /MD, /MT, /LD(런타임 라이브러리 사용)를 참조하세요.

  • _PPLTASKS_WITH_WINRTPPL(병렬 패턴 라이브러리)을 사용하는 코드가 /ZW 컴파일러 옵션에 대해 다른 설정을 사용하여 컴파일된 개체에 연결되어 있음을 나타냅니다. (/ZW C++/CX를 지원합니다.) PPL을 사용하거나 사용하는 코드는 앱의 나머지 부분에 사용된 것과 동일한 /ZW 설정을 사용하여 컴파일해야 합니다.

이러한 기호의 값이 Visual Studio 솔루션의 프로젝트 전체에서 일관되고 앱이 연결하는 코드 및 라이브러리와도 일치하는지 확인합니다.

타사 라이브러리 문제 및 vcpkg

빌드의 일부로 타사 라이브러리를 구성하려고 할 때 이 오류가 표시되는 경우 C++ 패키지 관리자인 vcpkg를 사용하여 라이브러리를 설치하고 빌드하는 것이 좋습니다. vcpkg는 점점 늘어나는 대규모 타사 라이브러리 목록을 지원하고 프로젝트의 일부로 성공적인 빌드에 필요한 모든 구성 속성 및 종속성을 설정합니다.

참고 항목

링커 도구 오류 및 경고