В проекте, с которым я работаю, возникает новая ошибка компоновщика:
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).
Мы используем Visual Studio 2010 в Windows 7.
Этот проект использовался для компиляции. Это оболочка С++/CLI DLL вокруг некоторого неуправляемого кода и, таким образом, включает в себя поддержку Common Language Runtime. Вещь с измененной заключается в том, что внешняя статическая библиотека, с которой мы связаны, была "обновлена". Мы получаем эту ошибку, когда пытаемся скомпилировать проект, который ссылается на него.
Microsoft "help" для этой проблемы заключается в том, чтобы "запустить ildasm -tokens в объектных файлах, чтобы определить, какие типы имеют маркеры, перечисленные в error_message, и искать различия". Затем я проверил эту страницу и заметил, что параметр /tokens
действителен только для файлов .exe и .dll... но это компоновщик ошибка, поэтому мой. DLL файл еще не создан!
Я попытался запустить такие вещи, как ildasm -tokens AssemblyInfo.obj
, но единственное, что происходит, это то, что окно открывается с этим невероятно полезным сообщением об ошибке:
Спасибо Microsoft!
Я не уверен, как продолжить устранение этой проблемы. Выпуск сборки работает правильно - это только отладка, которая перепуталась. Поэтому где-то в миксе я предполагаю, что тип std::string
имеет другой размер или что-то еще...
Любые идеи?