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