Condividi tramite


Avviso degli strumenti del linker LNK4217

il simbolo 'symbol' definito in 'filename_1.obj' viene importato da 'filename_2.obj' nella funzione 'function'

__declspec(dllimport) è stato specificato per un simbolo anche se il simbolo è definito in un file di oggetto nella stessa immagine. Rimuovere il modificatore per risolvere l'avviso __declspec(dllimport) .

Osservazioni:

simbolo è il nome del simbolo definito all'interno dell'immagine. function è la funzione che importa il simbolo.

Questo avviso non viene visualizzato quando si esegue la compilazione usando l'opzione /clr .

LNK4217 può verificarsi anche se si tenta di collegare due moduli insieme, quando invece è necessario compilare il secondo modulo con la libreria di importazione del primo modulo.

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

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

E quindi,

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

Il tentativo di compilare questi due moduli come illustrato di seguito comporterà LNK4217:

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

Per correggere l'errore, dopo aver compilato i due file, passare tt.obj a lib.exe per creare un file lib e quindi collegare main.obj con tt.lib, come illustrato di seguito:

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

Vedi anche

Avviso degli strumenti del linker LNK4049
Avviso degli strumenti del linker LNK4286
dllexport, dllimport