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:
Saat menggunakan opsi /INCREMENTAL .
Saat menggunakan opsi /LTCG .
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
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