当我尝试以调试模式编译它时,会出现以下错误:
奇怪的是,在发布模式下,它可以正常编译和工作。错误 22 错误 LNK2022: 元数据操作失败 (8013118D) :
重复类型的不一致布局信息.... MSVCMRTD.lib(locale0_implib.obj)
唯一的区别是我更改了以下内容:
配置属性 -> C/C++ -> 代码生成 -> 运行库
当设置为:多线程调试DLL (/MDd)
时,会抛出错误。当设置为:
多线程DLL (/MD)
时,可以正常编译。所有其他项目中的DLL(CLI和C++)都使用相同的属性,也可以正常工作。
我正在使用VS2010。
那么,我该如何解决这个问题?
并且,我能否得到一些关于为什么会发生这种情况的解释?
更新:
我已经尝试更改项目属性中的每个选项,但没有运气。
我在某个地方读到,这可能是由于具有相同名称的类型的重复声明引起的。
但是在CLI文件中,我明确从std调用std::string等。
重命名对象无效。
还有其他想法吗?
更新:
一些错误复制粘贴:
error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (std._String_val<char,std::allocator<char> >): (0x02000097). E:\MyProject....\MSVCMRTD.lib(locale0_implib.obj) DllName
error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (std._String_iterator<char,std::char_traits<char>,std::allocator<char> >): (0x02000091). E:\MyProject....\MSVCMRTD.lib(locale0_implib.obj) AnotherDllName
请注意,MSVCMRTD.lib 文件实际上是用于编译的 MS 文件,不在我的项目中(也不应该在其中)。 更新: 如果这有帮助的话,这是链接器命令行:
而下面这个可以工作的版本是:/OUT:"E:\blah.CLI.dll" /INCREMENTAL /NOLOGO /LIBPATH:"e:\blah\Output\" /LIBPATH:"E:\blah\lib_64" /LIBPATH:"blah\Lib_64\" /DLL "e:\Otheblaf.lib" /MANIFEST /ManifestFile:"x64\Debug\blah.CLI.dll.intermediate.manifest" /ALLOWISOLATION /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"E:\blah.CLI.pdb" /SUBSYSTEM:WINDOWS /OPT:NOREF /OPT:NOICF /PGD:"E:\blah.CLI.pgd" /TLBID:1 /DYNAMICBASE:NO /FIXED:NO /MACHINE:X64 /ERRORREPORT:QUEUE
/OUT:"E:\blah.CLI.dll" /INCREMENTAL:NO /NOLOGO /LIBPATH:"E:\blah\" /LIBPATH:"E:\blah\Output\" /LIBPATH:"E:\blah\lib_64" /DLL "Configuration.lib" "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" "E:\blah.lib" /MANIFEST /ManifestFile:"blah.CLI.dll.intermediate.manifest" /ALLOWISOLATION /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"E:\blah.CLI.pdb" /SUBSYSTEM:WINDOWS /OPT:REF /OPT:ICF /PGD:"E:\blah.CLI.pgd" /LTCG /TLBID:1 /DYNAMICBASE /FIXED:NO /MACHINE:X64 /ERRORREPORT:QUEUE