Compartir a través de


Error de las herramientas del vinculador LNK2022

error en la operación de metadatos (HRESULT) : error_message

El vinculador detectó un error al combinar metadatos. Los errores de metadatos se deben resolver para vincularse correctamente.

Una manera de diagnosticar este problema es ejecutar ildasm -tokens en los archivos de objeto para encontrar qué tipos tienen los tokens enumerados en error_message y buscar diferencias. En los metadatos, dos tipos diferentes con el mismo nombre no son válidos, incluso si el atributo solo LayoutType es diferente.

Una razón para LNK2022 es cuando existe un tipo (como un struct) en varios compiladores con el mismo nombre, pero con definiciones en conflicto y cuando se compila con /clr. En este caso, asegúrese de que el tipo tiene una definición idéntica en todos los compilandos. El nombre de tipo aparece en error_message.

Otra posible causa de LNK2022 es cuando el enlazador encuentra un archivo de metadatos en una ubicación diferente de la especificada para el compilador (con #using). Asegúrese de que el archivo de metadatos (.dll o .netmodule) se encuentra en la misma ubicación cuando se pasó al vinculador, como estaba cuando se pasó al compilador.

Al compilar una aplicación ATL, el uso de la macro _ATL_MIXED es necesario en todos los compiladores, si se usa en al menos uno.

Ejemplos

En el ejemplo siguiente se define un tipo vacío.

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

En este ejemplo se muestra que no se pueden vincular dos archivos de código fuente que contienen tipos del mismo nombre, pero definiciones diferentes.

El ejemplo siguiente genera el error LNK2022.

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