Bagikan melalui


LNK4210 Peringatan Alat Linker

bagian bagian ada; mungkin ada penginisialisasi statis atau terminator yang tidak tertangani

Keterangan

Beberapa kode telah memperkenalkan penginisialisasi statis atau terminator, tetapi kode startup pustaka VCRuntime atau yang setara (yang perlu menjalankan inisialisasi statis atau terminator) tidak dijalankan saat aplikasi dimulai. Berikut adalah beberapa contoh kode yang memerlukan penginisialisasi statis atau terminator:

  • Variabel kelas global dengan tabel konstruktor, destruktor, atau fungsi virtual.

  • Variabel global diinisialisasi dengan konstanta non-waktu kompilasi.

Untuk memperbaiki masalah ini, cobalah salah satu hal berikut ini:

  • Hapus semua kode dengan penginisialisasi statis.

  • Jangan gunakan /NOENTRY. Setelah menghapus /NOENTRY, Anda mungkin juga harus menghapus /NODEFAULTLIB dari baris perintah linker Anda.

  • Jika build Anda menggunakan /MT, tambahkan libcmt.lib, libvcruntime.lib, dan libucrt.lib ke baris perintah linker Anda. Jika build Anda menggunakan /MTd, tambahkan libcmtd.lib, vcruntimed.lib, dan libucrtd.lib.

  • Saat berpindah dari /clr:pure kompilasi ke /clr, hapus opsi /ENTRY dari linker-line. Ini memungkinkan inisialisasi CRT dan memungkinkan penginisialisasi statis dijalankan saat startup aplikasi. Opsi kompilator /clr:pure tidak digunakan lagi di Visual Studio 2015 dan tidak didukung di Visual Studio 2017.

Opsi pengkompilasi /GS memerlukan inisialisasi oleh __security_init_cookie fungsi . Inisialisasi ini disediakan secara default dalam kode startup pustaka VCRuntime yang berjalan di _DllMainCRTStartup.

  • Jika proyek Anda dibangun menggunakan /ENTRY, dan jika /ENTRY diteruskan fungsi selain _DllMainCRTStartup, fungsi harus memanggil _CRT_INIT untuk menginisialisasi CRT. Panggilan ini saja tidak cukup jika DLL Anda menggunakan /GS, memerlukan penginisialisasi statis, atau dipanggil dalam konteks kode MFC atau ATL. Lihat DLL dan perilaku pustaka run-time Visual C++ untuk informasi selengkapnya.

Baca juga