Sdílet prostřednictvím


Chyba linkerů LNK2022

Operace metadat selhala (HRESULT): error_message

Linker zjistil chybu při slučování metadat. Chyby metadat musí být vyřešeny, aby bylo možné úspěšně propojit.

Jedním ze způsobů, jak tento problém diagnostikovat, je spuštění ildasm -tokens v souborech objektů, abyste zjistili, které typy mají tokeny uvedené v error_messagea vyhledejte rozdíly. V metadatech nejsou platné dva různé typy se stejným názvem, i když se liší pouze atribut LayoutType.

Jedním z důvodů LNK2022 je situace, kdy typ (například struktura) existuje ve více compilandech se stejným názvem, ale s konfliktními definicemi a při kompilaci pomocí /clr. V tomto případě se ujistěte, že typ má identickou definici ve všech compilands. Název typu je uveden v seznamu error_message.

Další možnou příčinou LNK2022 je, že linker najde soubor metadat v jiném umístění, než byl zadán kompilátoru (s #using). Ujistěte se, že soubor metadat (.dll nebo .netmodule) je ve stejném umístění při předání do linkeru, jako byl při jeho předání kompilátoru.

Při vytváření aplikace ATL je použití makra _ATL_MIXED vyžadováno ve všech compilands, pokud se používá alespoň v jednom.

Příklady

Následující ukázka definuje prázdný typ.

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

Tato ukázka ukazuje, že nelze propojit dva soubory zdrojového kódu, které obsahují typy stejného názvu, ale různé definice.

Následující ukázka vygeneruje LNK2022.

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