试图将VS2008项目VS2010转换的时候,我发现了链接器错误LNK2038。当编译两个不同的项目时,会出现此错误,其中一个正在使用_DEBUG预处理器宏,另一个不是。基本上我有一个第三方库,只有发布.libs,所以当我尝试在调试模式下构建项目时使用该库时,我得到了这种不匹配。LNK2038,迭代器失配误差,需要忽略
我理解为什么微软给这种错误(STL迭代器的安全),但我们的项目不使用微软的STL,我们打了补丁,所以这个错误意味着什么对我们的项目。我只是需要一种方法来阻止它做这个检查。
STL内部包含一个名为yvals.h的文件,其中包含各种_ITERATOR_DEBUG_LEVEL设置的#pragma detect_mismatch定义。该组定义包裹在#ifndef_ALLOW_ITERATOR_DEBUG_LEVEL_MISMATCH,#endif中。但是,即使我将_ALLOW_ITERATOR_DEBUG_LEVEL_MISMATCH定义为我的整个项目的预处理器宏,我仍然收到相同的链接器错误。我甚至可以改变yvals.h来定义这个宏,它什么都不做(我假设因为STL本身需要重新编译)。
所以我的问题基本上,我可以采取什么步骤使_ALLOW_ITERATOR_DEBUG_LEVEL_MISMATCH实际上按预期工作,以便我的项目在VS2010中编译时不检查任何地方?
编辑:我知道这是一个迟到的反应,但我只是发现这个职位,意识到我没有张贴的解决方案。正如其他人提到的那样,图书馆存在不匹配的情况。事实证明,VS2010更改了某些项目的默认目录(我发现MSDN上的一个线程充满了对它的投诉),并且该目录更改导致VS2010查找调试库的错误目录,并且它是改为找到发布库。
你的项目和第三方库都将链接到同一版本包含标准模板实现的库,所以他们*必须*匹配。尝试混合只会导致很大的痛苦,消除警告只是它的开始。 –
它们确实匹配,它们都使用相同版本的STLPort,这正是我们用于STL实现的原因。在任何情况下,我们都不使用MSFT STL。事实上,我不明白为什么我们的项目是指MSFT STL甚至可以得到这个错误。 –
你说这是第三方库 - 你绝对相信他们也在使用STLPort?你确定谁包括yvals.h? –