Compartilhar via


Erro das ferramentas de vinculador LNK2022

falha na operação de metadados (HRESULT): error_message

O vinculador detectou um erro ao mesclar metadados. Os erros de metadados precisam ser resolvidos para vincular com êxito.

Uma maneira de diagnosticar esse problema é executar ildasm -tokens nos arquivos de objeto para localizar quais tipos têm os tokens listados em error_message e procurar diferenças. Em metadados, dois tipos diferentes com o mesmo nome não são válidos, mesmo que apenas o atributo Just LayoutType seja diferente.

Um motivo para LNK2022 é quando um tipo (como um struct) existe em vários compilands com o mesmo nome, mas com definições conflitantes, e quando você compila com /clr. Nesse caso, verifique se o tipo tem uma definição idêntica em todos os compilands. O nome do tipo está listado em error_message.

Outra causa possível para LNK2022 é quando o vinculador encontra um arquivo de metadados em um local diferente do especificado para o compilador (com #using). Verifique se o arquivo de metadados (.dll ou .netmodule) está no mesmo local, quando passado para o vinculador, em que estava quando foi passado para o compilador.

Ao criar um aplicativo da ATL, se a macro _ATL_MIXED for usada em pelo menos um compiland, o uso dela será exigido em todos.

Exemplos

O exemplo a seguir define um tipo vazio.

// LNK2022_a.cpp
// compile with: /clr /c
public ref class Test {};

Este exemplo mostra que você não pode vincular dois arquivos de código-fonte que contêm tipos de mesmo nome, mas definições diferentes.

O exemplo a seguir gera o erro LNK2022.

// LNK2022_b.cpp
// compile with: LNK2022_a.cpp /clr /LD
// LNK2022 expected
public ref class Test {
   void func() {}
   int var;
};