Bagikan melalui


LNK2022 Kesalahan Alat Linker

operasi metadata gagal (HRESULT) : error_message

Linker mendeteksi kesalahan saat menggabungkan metadata. Kesalahan metadata harus diselesaikan agar berhasil ditautkan.

Salah satu cara untuk mendiagnosis masalah ini adalah dengan menjalankan ildasm -token pada file objek untuk menemukan jenis mana yang memiliki token yang tercantum di error_message, dan mencari perbedaan. Dalam metadata, dua jenis berbeda dengan nama yang sama tidak valid, bahkan jika atribut LayoutType saja berbeda.

Salah satu alasan untuk LNK2022 adalah ketika jenis (seperti struct) ada di beberapa kompilasi dengan nama yang sama, tetapi dengan definisi yang bertentangan, dan ketika Anda mengkompilasi dengan /clr. Dalam hal ini, pastikan bahwa jenis memiliki definisi yang identik di semua kompilasi. Nama jenis tercantum dalam error_message.

Kemungkinan penyebab lain untuk LNK2022 adalah ketika linker menemukan file metadata di lokasi yang berbeda dari yang ditentukan untuk pengkompilasi (dengan #using ). Pastikan bahwa file metadata (.dll atau .netmodule) berada di lokasi yang sama ketika diteruskan ke linker, seperti ketika diteruskan ke pengkompilasi.

Saat membangun aplikasi ATL, penggunaan makro _ATL_MIXED diperlukan di semua kompilasi, jika digunakan dalam setidaknya satu.

Contoh

Sampel berikut mendefinisikan jenis kosong.

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

Sampel ini menunjukkan bahwa Anda tidak dapat menautkan dua file kode sumber yang berisi jenis nama yang sama tetapi definisi yang berbeda.

Sampel berikut menghasilkan LNK2022.

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