Bağlayıcı Araçları Uyarısı LNK4217

'filename_1.obj' içinde tanımlanan 'symbol' simgesi 'function' işlevindeki 'filename_2.obj' tarafından içeri aktarıldı

__declspec(dllimport), simge aynı görüntüdeki bir nesne dosyasında tanımlansa bile bir simge için belirtildi. Bu uyarıyı __declspec(dllimport) çözmek için değiştiriciyi kaldırın.

Açıklamalar

simgesi , görüntü içinde tanımlanan simge adıdır. işlevi , simgeyi içeri aktaran işlevdir.

/clr seçeneğini kullanarak derleme yaptığınızda bu uyarı görünmez.

LNK4217, iki modülü birbirine bağlamaya çalıştığınızda da oluşabilir; bunun yerine ikinci modülü ilk modülün içeri aktarma kitaplığıyla derlemeniz gerekir.

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

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

Ve sonra,

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

Bu iki modülü burada gösterildiği gibi derlemeye çalışmak LNK4217 neden olur:

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

Hatayı düzeltmek için, iki dosyayı derledikten sonra tt.obj dosyasını lib.exe dosyasına geçirerek bir .lib dosyası oluşturun ve burada gösterildiği gibi main.obj dosyasını tt.lib ile bağlayın:

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

Ayrıca bkz.

Bağlayıcı Araçları Uyarısı LNK4049
Bağlayıcı Araçları Uyarısı LNK4286
dllexport, dllimport