LNK2038,迭代器不匹配错误,需要忽略
LNK2038, iterator mismatch error, need to ignore
在尝试将VS2008项目转换为VS2010时,我得到了链接器错误LNK2038。当编译两个不同的项目,其中一个使用_DEBUG预处理器宏,而另一个没有时,会发生此错误。基本上我有一个第三方库,只有release .libs,所以当我在调试模式下构建我的项目时尝试使用该库时,我得到了这个不匹配。
我理解为什么微软给出这个错误(STL迭代器安全),但是我们的项目不使用微软的STL,我们使用STLPort,所以这个错误对我们的项目没有任何意义。我只是需要一种方法来阻止它做这个检查。
在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,那么你只能链接使用STLPort的库,而不能链接使用vc++标准实现的库。如果混合,要么你链接失败,要么你会得到奇怪的运行时错误。
问题是像std::vector<>::iterator
这样的东西可以被定义完全不同;取决于它们在哪里和如何被使用,你会发现自己使用了一个在不同库中构造的实例,使用不同的布局
- 错误 C2760:语法错误:映射迭代器上意外的标记"标识符",预期的";"
- 初始化迭代器错误 C++ 在 GCC 编译器中
- 迭代器类的重载前缀增量运算符会引发分段错误
- 为什么我在使用 istream 迭代器时会出现 seg 错误?
- 在静态库中使用输出迭代器时出现链接器错误
- 在分配和发布递增循环迭代器时C++无限循环(gcc 错误?
- 比较迭代器会使程序崩溃,而不会在自定义气泡排序实现中出现错误
- C++结构编译器错误询问向量的迭代器
- 编译时二叉搜索树错误的反向迭代器表示"no matching function call for operator=()"
- 编译错误 std::vector<std::shared_ptr<T>>迭代器和擦除方法
- 赛松迭代器错误
- 向量迭代器不兼容的错误,用于保存另一个向量的迭代器的向量
- C++,弹出调试断言失败窗口,我得到矢量迭代器不兼容的错误运行时
- 在 leveldb 的 c++ 示例中声明迭代器时出现分段错误
- std::map 擦除 - 将迭代器传递给错误的映射
- C++向量迭代器nth_element编译错误
- 如何修复错误,迭代器未在此范围内声明,并且迭代器未命名类型'
- 如何修复使用矢量和迭代器打印值的错误
- C++ 迭代器错误"does not refer to a value"
- 使用 -std=c++0x 会导致错误:“迭代器”未命名类型错误