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;
};
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk