Teilen über


Linkertoolfehler LNK2022

Fehler beim Metadatenvorgang (HRESULT): error_message

Der Linker hat beim Zusammenführen von Metadaten einen Fehler erkannt. Die Metadatenfehler müssen behoben werden, um die Verknüpfung erfolgreich zu verknüpfen.

Eine Möglichkeit, dieses Problem zu diagnostizieren, besteht darin, ildasm -tokens für die Objektdateien auszuführen, um zu ermitteln, in welchen Typen die Token aufgelistet error_messagesind, und nach Unterschieden suchen. In Metadaten sind zwei unterschiedliche Typen mit demselben Namen ungültig, auch wenn das just LayoutType-Attribut anders ist.

Ein Grund für LNK2022 ist, dass ein Typ (z. B. eine Struktur) in mehreren Kommisien mit demselben Namen vorhanden ist, jedoch mit widersprüchlichen Definitionen und beim Kompilieren mit /clr. Stellen Sie in diesem Fall sicher, dass der Typ in allen Kompilands eine identische Definition aufweist. Der Typname wird in error_message.

Eine weitere mögliche Ursache für LNK2022 ist, wenn der Linker eine Metadatendatei an einem anderen Speicherort findet als dem, der dem Compiler (mit #using) angegeben wurde. Stellen Sie sicher, dass sich die Metadatendatei (.dll oder .netmodule) am gleichen Speicherort befindet, wenn sie an den Linker übergeben wurde, wie es beim Übergeben an den Compiler war.

Beim Erstellen einer ATL-Anwendung ist die Verwendung des Makros _ATL_MIXED in allen Kompilands erforderlich, wenn es in mindestens einem verwendet wird.

Beispiele

Im folgenden Beispiel wird ein leerer Typ definiert.

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

In diesem Beispiel wird gezeigt, dass Sie keine zwei Quellcodedateien verknüpfen können, die Typen desselben Namens, aber unterschiedliche Definitionen enthalten.

Im folgenden Beispiel wird LNK2022 generiert.

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