我正在使用的项目中遇到新的链接器错误:
1>MSVCMRTD.lib(locale0_implib.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (std.basic_string<char,std::char_traits<char>,std::allocator<char> >): (0x0200004e).
1>MSVCMRTD.lib(locale0_implib.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (std.basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >): (0x02000075).
1>MSVCMRTD.lib(locale0_implib.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (std._String_iterator<char,std::char_traits<char>,std::allocator<char> >): (0x02000091).
1>MSVCMRTD.lib(locale0_implib.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (std._String_const_iterator<char,std::char_traits<char>,std::allocator<char> >): (0x02000092).
1>MSVCMRTD.lib(locale0_implib.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (std._String_val<char,std::allocator<char> >): (0x02000097).
1>MSVCMRTD.lib(locale0_implib.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (std._String_val<wchar_t,std::allocator<wchar_t> >): (0x02000099).
我们在 Windows 7 中使用 Visual Studio 2010。
这个项目用来编译。它是围绕一些非托管代码的 C++/CLI DLL 包装器,因此包括公共语言运行时支持。改变的是我们链接到的外部静态库被“更新”了。当我们尝试编译链接到它的项目时,我们现在遇到了这个错误。
微软对此问题的“帮助”是“在目标文件上运行ildasm –tokens以查找哪些类型具有 error_message 中列出的令牌,并查找差异”。然后我检查了这个页面,发现该/tokens
选项只对 .exe 和 .dll 文件有效……但这是一个链接器错误,所以我的 .dll 文件还没有生成!
我试过运行类似的东西ildasm -tokens AssemblyInfo.obj
,但唯一发生的事情是一个窗口打开了这个非常有用的错误消息:
感谢微软!
我不确定如何继续解决此问题。Release 构建工作正常——只有 Debug 搞砸了。所以在混合的某个地方,我猜std::string
类型是不同的大小或什么的......
有任何想法吗?