跨越VS项目的STL矢量腐败

psu*_*lue 4 c++ stl vector visual-studio

我有一个Visual Studio 2005解决方案,其中包含几个彼此独立构建的项目.主项目静态链接其他项目.我在其中一个静态链接库中得到了非常奇怪的STL向量损坏.例如,我声明一个std :: vector然后执行一个sort( thatVector.begin(), thatVector.end() ),但是当我调试它并查看反汇编时,我看到:

std::vector<SomeOtherClass<SomeOtherTemplateType>,std::allocator<SomeOtherClass<SomeOtherTemplateType> > >::begin
Run Code Online (Sandbox Code Playgroud)

令人难以置信的奇怪的是,SomeOtherClass并且SomeOtherTemplate在主项目中声明,所以这个库应该完全不知道它们.

我试过冻结所有其他线程,认为其中一个可能是腐败thatVector,但没有骰子.我完全失去了.有没有人经历过这样的事情?

编译信息: - 主程序/ Zi,自定义优化(基本上是可调试的发布版本) - 静态库/ Zi,/ Od

链接信息:/ DEBUG

Kir*_*sky 5

问题是库和程序已经使用不同的编译器选项进行编译.结果你有不同的迭代器实现,但具有相同的签名.这是已知问题,Microsoft建议使用适当的一个编译静态链接库和链接可执行文件的多个版本.