Ошибка средств компоновщика LNK2022
Сбой операции метаданных (HRESULT): error_message
Компоновщик обнаружил ошибку при слиянии метаданных. Ошибки метаданных должны быть разрешены для успешной связи.
Одним из способов диагностики этой проблемы является запуск маркеров ildasm в файлах объектов, чтобы найти, какие типы имеют маркеры, перечисленные в error_message
, и искать различия. В метаданных два разных типа с одинаковым именем недопустимы, даже если только атрибут LayoutType отличается.
Одна из причин LNK2022 заключается в том, что тип (например, структура) существует в нескольких компиляторах с одинаковым именем, но с конфликтующими определениями и при компиляции с / clr. В этом случае убедитесь, что тип имеет одинаковое определение во всех компиляторах. Имя типа указано в error_message
.
Еще одна возможная причина LNK2022 заключается в том, что компоновщик находит файл метаданных в другом расположении, отличном от указанного компилятору (с #using ). Убедитесь, что файл метаданных (DLL или .netmodule) находится в том же расположении, что и при передаче компоновщика, так как он был передан компилятору.
При создании приложения ATL необходимо использовать макрос _ATL_MIXED
во всех компиляторах, если он используется по крайней мере в одном.
Примеры
В следующем примере определяется пустой тип.
// LNK2022_a.cpp
// compile with: /clr /c
public ref class Test {};
В этом примере показано, что невозможно связать два файла исходного кода, содержащие типы одного и того же имени, но разные определения.
Следующий пример создает LNK2022.
// LNK2022_b.cpp
// compile with: LNK2022_a.cpp /clr /LD
// LNK2022 expected
public ref class Test {
void func() {}
int var;
};
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по