Bagikan melalui


LNK4049 Peringatan Alat Linker

simbol 'simbol' yang ditentukan dalam 'filename.obj' diimpor

__declspec(dllimport) ditentukan untuk simbol meskipun simbol didefinisikan dalam file objek filename.obj dalam gambar yang sama. Hapus pengubah __declspec(dllimport) untuk mengatasi peringatan ini.

Keterangan

Peringatan ini dihasilkan oleh linker saat Anda menentukan simbol dalam satu file objek dan mereferensikannya dengan menggunakan __declspec(dllimport) pengubah deklarasi di yang lain.

Peringatan LNK4049 adalah versi yang lebih umum dari LNK4217 Peringatan Alat Linker. Linker menghasilkan LNK4049 peringatan ketika tidak dapat menentukan fungsi atau file objek mana yang mereferensikan simbol yang diimpor.

Kasus umum di mana LNK4049 dihasilkan alih-alih LNK4217 adalah:

Untuk mengatasi LNK4049, coba salah satu prosedur berikut:

  • Hapus pengubah __declspec(dllimport) dari deklarasi maju simbol yang memicu LNK4049. Anda dapat mencari simbol dalam gambar biner dengan menggunakan utilitas DUMPBIN . Sakelar DUMPBIN /SYMBOLS menampilkan tabel simbol COFF gambar. Untuk informasi selengkapnya tentang utilitas DUMPBIN , lihat Referensi DUMPBIN.

  • Nonaktifkan penautan inkremental dan pengoptimalan seluruh program untuk sementara waktu. Saat dikompresi ulang, aplikasi menghasilkan LNK4217 Peringatan, yang mencakup nama fungsi yang mereferensikan simbol yang diimpor. Hapus pengubah __declspec(dllimport) deklarasi dari simbol yang diimpor dan aktifkan kembali penautan inkremental atau pengoptimalan seluruh program sesuai kebutuhan.

Meskipun kode akhir yang dihasilkan bertingkat dengan benar, kode yang dihasilkan untuk memanggil fungsi yang diimpor kurang efisien daripada memanggil fungsi secara langsung. Peringatan ini tidak muncul saat Anda mengkompilasi dengan menggunakan opsi /clr .

Untuk informasi selengkapnya tentang deklarasi impor dan ekspor data, lihat dllexport, dllimport.

Contoh

Menautkan dua modul berikut akan menghasilkan LNK4049. Modul pertama menghasilkan file objek yang berisi satu fungsi yang diekspor.

// LNK4049a.cpp
// compile with: /c

__declspec(dllexport) int func()
{
   return 3;
}

Modul kedua menghasilkan file objek yang berisi deklarasi penerusan ke fungsi yang diekspor dalam modul pertama, bersama dengan panggilan ke fungsi ini di dalam main fungsi. Menautkan modul ini dengan modul pertama akan menghasilkan LNK4049. Hapus pengubah __declspec(dllimport) dari deklarasi untuk menyelesaikan peringatan.

// LNK4049b.cpp
// compile with: /link /WX /LTCG LNK4049a.obj
// LNK4049 expected

__declspec(dllimport) int func();
// try the following line instead
// int func();

int main()
{
   return func();
}

Baca juga

LNK4217 Peringatan Alat Linker
LNK4286 Peringatan Alat Linker
dllexport, dllimport