链接器工具错误 LNK2038

检测到“name”的不匹配项:值“value_1”不匹配值“value_2”(filename.obj 中)

链接器检测到符号不匹配。 此错误指示不同部分的应用程序(包括库或应用程序链接到的其他对象代码)使用了冲突的符号定义。 detect mismatch 杂注用于定义此类符号和检测其冲突值。

可能的原因和解决方案

当项目中的对象文件过时,可能会发生此错误。 在对此错误尝试其他解决方案之前,应执行清理生成以确保对象文件是最新的。

Visual Studio 定义以下符号以防止链接不兼容的代码,这种代码可能导致运行时错误或其他意外行为。

  • _MSC_VER 指示用于生成应用或库的 Microsoft C++ 编译器 (MSVC) 的主版本号和次版本号。 使用某一版本的 MSVC 编译的代码与使用具有不同的主版本号和次版本号的版本编译的代码不兼容。 有关更多信息,请参阅预定义宏中的 _MSC_VER

    如果链接到了与正在使用的 MSVC 版本不兼容的库,并且无法获取或生成兼容版本的库,则可以使用早期版本的编译器生成项目:将项目的“平台工具集”属性更改为早期工具集。 有关详细信息,请参阅如何:修改目标框架和平台工具集

  • _ITERATOR_DEBUG_LEVEL 指示在 C++ 标准库中启用的安全和调试功能的级别。 这些功能可更改某些 C++ 标准库对象的表示方式,从而使它们与使用不同的安全和调试功能的 C++ 标准库对象不兼容。 有关详细信息,请参阅 _ITERATOR_DEBUG_LEVEL

  • RuntimeLibrary 指示由应用或库使用的 C++ 标准库和 C 运行时的版本。 使用一个 C++ 标准库或 C 运行时版本的代码与使用另一个版本的代码的不兼容。 有关详细信息,请参阅 /MD、/MT、/LD(使用运行时库)

  • _PPLTASKS_WITH_WINRT 指示使用并行模式库 (PPL) 的代码将链接到使用 /ZW 编译器选项的其他设置编译的对象。 (/ZW 支持 C++/CX。)使用或依赖于 PPL 的代码必须通过使用在其余应用中采用的同一 /ZW 设置编译。

请确保这些符号的值在 Visual Studio 解决方案中的所有项目中是一致的,并确保这些值与你的应用链接到的代码和库是一致的。

第三方库问题和 vcpkg

如果在尝试将第三方库配置为生成的一部分时看到此错误,请考虑使用 vcpkg(C++ 包管理器)来安装和生成该库。 vcpkg 支持一个庞大且不断增长的第三方库列表,并将成功生成所需的所有配置属性和依赖项设置为项目的一部分。

另请参阅

链接器工具错误和警告