我想尝试/ MTd链接器选项而不是/ MDd用于我的DLL项目的调试版本 . 我为Release版本使用静态链接 . 在Debug配置中,我收到链接器错误:
break.obj : error LNK2005:
"public: void __thiscall std::_Container_base12::_Orphan_all(void)"
(?_Orphan_all@_Container_base12@std@@QAEXXZ)
is already defined in msvcprtd.lib(MSVCP100D.dll).
共有5个类似的错误,所有LNK2005都在 break.obj
中,都提到了这个base12的东西 . break.obj
是按字母顺序排列的第一个文件,因此也许其他文件也会出现问题 . 我不是在那里发生的吗?
1 回答
也许发布一些构建日志 - 这会导致DLL运行时处于链接步骤 .
确保清理所有内容并执行完全重建 . 如果这不是一个或多个源文件的任何文件级项目设置,则可能导致重建它以链接DLL运行时 . 据我所知,从IDE中识别此类文件级覆盖并不容易 . 直接在文本编辑器中查看构建日志或
.vcxproj
文件可能有助于缩小范围 . 如果查看.vcxproj
文件,具有项目覆盖的源文件将具有文件<ClCompile>
元素中重写设置的XML元素,其中大多数<ClCompile>
元素将没有子元素 .最后,如果它不是太大,你可能想看看是否从头开始重新创建项目有帮助(我知道它是激烈的,不应该是必要的,但有时它有助于摆脱古怪) .
作为旁注,MSDN说(http://msdn.microsoft.com/en-us/library/abx4dbyh.aspx):
顺便说一下,
_Container_base12
是一个用于迭代器检查/调试的类型 - 's why you don't直接在任何源文件中查看它或它的任何成员函数 . 您应该确保使用_HAS_ITERATOR_DEBUGGING
和_SECURE_SCL
宏设置没有做任何不正确的事情 . 但我认为这与您具体的具体问题无关 . 如果您最终认为它们与您的问题有关,您可能需要查看:Visual Studio debug iterators
http://blogs.msdn.com/b/vcblog/archive/2007/08/10/the-future-of-the-c-language.aspx#4617984