Informasi Dukungan Internal Microsoft
BUG #: 101959 (Visual Studio)
Ringkasan
Ketika Anda membangun DLL dengan menggunakan versi 64-bit dari Microsoft Visual C++ Compiler dan Linker, Anda mungkin menerima Linker nomor galat LNK4197 jika fungsi telah dinyatakan ekspor lebih dari satu kali.
Gejala
Linker output mungkin mirip dengan berikut ini:
C:\>link /NOLOGO /def:Sample.def /pdb:Sample.pdb /out:Sample.dll Sample.objSample.obj : warning LNK4197: export 'DllSample' specified multiple times; using first specification Creating library Sample.lib and object Sample.exp
Penyebab
Linker nomor galat LNK4197 yang dihasilkan saat fungsi telah dinyatakan ekspor lebih dari satu kali. Fungsi menyatakan ekspor di salah satu cara berikut:
-
Fungsi menyatakan dengan menggunakan kata kunci __declspec(dllexport) di file sumber C:
__declspec(dllexport) int DllSample() { return 42;}
-
Fungsi menyatakan menggunakan definisi modul (. Berkas DEF):
EXPORTS DllSample
Galat Linker ini mungkin terjadi paling sering ketika kata kunci __declspec(dllexport) kedua dan. DEF berkas yang digunakan untuk menetapkan nama fungsi yang sama di. Proyek DLL.
Pemecahan Masalah
Untuk mengatasi perilaku ini, tentukan diekspor fungsi hanya satu kali, dengan menggunakan kata kunci __declspec(dllexport) atau dengan menggunakan. DEF file. Jangan gunakan kedua metode ini.
Status
Perilaku ini merupakan bagian dari rancangan.
Informasi Selengkapnya
Menyatakan fungsi ekspor lebih dari satu kali mungkin tidak menghasilkan galat Linker yang dijelaskan di bagian "Gejala" dari artikel ini dalam versi 32-bit dari Microsoft Windows C++ Compiler dan Linker. Namun, Microsoft menyarankan Anda untuk menentukan fungsi ekspor hanya satu kali dalam versi 32-bit dan 64-bit Windows C++ Compiler dan Linker.