Bagikan melalui


LNK4217 Peringatan Alat Linker

simbol 'simbol' yang didefinisikan dalam 'filename_1.obj' diimpor oleh 'filename_2.obj' dalam fungsi 'function'

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

Keterangan

simbol adalah nama simbol yang ditentukan dalam gambar. fungsi adalah fungsi yang mengimpor simbol .

Peringatan ini tidak muncul saat Anda mengkompilasi dengan menggunakan opsi /clr .

LNK4217 juga dapat terjadi jika Anda mencoba menautkan dua modul bersama-sama, ketika sebaliknya Anda harus mengkompilasi modul kedua dengan pustaka impor modul pertama.

// main.cpp
__declspec(dllimport) void func();

int main()
{
    func();
    return 0;
}

Kemudian,

// tt.cpp
// compile with: /c
void func() {}

Mencoba mengkompilasi kedua modul ini seperti yang ditunjukkan di sini akan menghasilkan LNK4217:

cl.exe /c main.cpp tt.cpp
link.exe main.obj tt.obj

Untuk memperbaiki kesalahan, setelah mengkompilasi dua file, teruskan tt.obj ke lib.exe untuk membuat file .lib, lalu tautkan main.obj dengan tt.lib seperti yang ditunjukkan di sini:

cl.exe /c main.cpp tt.cpp
lib.exe tt.obj /export:func /def
link.exe main.obj tt.lib

Baca juga

LNK4049 Peringatan Alat Linker
LNK4286 Peringatan Alat Linker
dllexport, dllimport