【发布时间】:2012-08-12 23:24:52
【问题描述】:
我正在处理的项目中遇到新的链接器错误:
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 包装器,因此包括公共语言运行时支持。 改变的是我们链接到的外部静态库被“更新”了。当我们尝试编译链接到它的项目时,我们现在遇到了这个错误。
Microsoft 对此问题的“帮助”是“在目标文件上运行 ildasm –tokens 以查找哪些类型具有 error_message 中列出的令牌,并查找差异”。然后我检查了this page,发现/tokens 选项只对.exe 和.dll 文件有效……但这是一个链接器错误,所以我的.dll 文件还没有生成!
我尝试过运行 ildasm -tokens AssemblyInfo.obj 之类的东西,但唯一发生的事情是打开一个窗口并显示以下非常有用的错误消息:
感谢微软!
我不确定如何继续解决此问题。 Release 构建工作正常——只有 Debug 搞砸了。所以在混合的某个地方,我猜std::string 类型的大小不同......
有什么想法吗?
【问题讨论】:
-
我有时会在更改头文件时收到此错误,并且编译器不会重新编译它应该重新编译的所有代码文件。您可能已经这样做了,但干净和完整的重建可能会有所帮助。
-
@DavidYaw 感谢您的建议——我一直在进行全面重建,但没有成功。我想我正在寻找一些东西......
标签: c++ windows linker c++-cli clr