【发布时间】:2021-01-10 00:34:54
【问题描述】:
我正在尝试为我的项目使用 DirectXTex 库。我从 GitHub 克隆了它,并使用适用于桌面的 Visual Studio 2019 解决方案构建它,其代码生成设置与我自己的项目中完全相同。它适用于调试配置,但是当我在 release 上构建时,会出现类似于此的错误消息:
_ITERATOR_DEBUG_LEVEL: Value 2 of (some DirectXTex .obj) is conflicting with value 0 of (my own .obj)
伴随着这条消息:
Runtime library: MTd_StaticDebug of (some DirectXTex .obj) is conflicting with MT_StaticRelease of (my own .obj)
这很奇怪,因为我将两个项目的运行时库都设置为多线程 (/MT) 用于发布和多线程调试 (/MTd) 用于调试。我做了一些研究,发现 this 文章涵盖了这个确切的问题,但这些解决方案都不适合我。我尝试了以下方法:
- 查看是否出于某种原因在 DirectXTex 的发布模式构建中定义了 _DEBUG 预处理器(不是)
- 尝试将两个项目设置都设置为多线程 DLL
- 检查所有代码生成设置是否真的相同(调试和发布)
- 检查我是否使用正确的库构建进行调试和发布
- 创建一个干净的新版本,以防我的 .obj 文件是旧版本
这些都不起作用。但是,如果我将自己项目的运行时库设置为 Multithreaded-Debug 用于发布模式,它可以编译并正常发布。这显然不是一个理想的解决方案。
我也不明白的是 DirectXTex 库似乎使用 MT_StaticDebug 构建 DirectXTex 的发布配置(至少错误消息表明),尽管我明确将其运行时库设置为多线程 (/MT) 以进行发布.我该如何解决这个问题?
【问题讨论】:
-
我认为错误信息很清楚:DirectXTex 在调试模式下编译(
NDEBUG和RELEASE未定义)并链接调试运行时。 -
@user7860670 但是 NDEBUG 是在 Release 中定义的,只是 _DEBUG 没有定义,应该是这样。我的问题是我用 /MT 显式编译 DirectXTex,但不知何故,DirectXTex .objs 似乎是用 /MTd 编译的。我还在我的项目中链接到库的发布版本。我可以检查库或我的项目中是否有任何可能的链接器选项?
标签: c++ visual-studio directx linker-errors msdn