Share via


Advertencia de las herramientas del vinculador LNK4217

el símbolo "symbol" definido en "filename_1.obj" lo importa "filename_2.obj" en la función 'function'

__declspec(dllimport) se especificó para un símbolo aunque el símbolo se define en el archivo objeto en la misma imagen. Quite el modificador __declspec(dllimport) para resolver esta advertencia.

Comentarios

symbol es el nombre de símbolo que se define dentro de la imagen. function es la función que importa el símbolo.

Esta advertencia no aparece cuando se compila mediante la opción /clr.

LNK4217 también puede producirse si intenta vincular dos módulos juntos, cuando en su lugar debe compilar el segundo módulo con la biblioteca de importación del primer módulo.

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

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

Y luego,

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

Si intenta compilar estos dos módulos, como se muestra aquí, se producirá el resultado de LNK4217:

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

Para corregir el error, después de compilar los dos archivos, pase tt.obj a lib.exe para crear un archivo .lib y, a continuación, vincule main.obj con tt.lib como se muestra aquí:

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

Consulte también

Advertencia de las herramientas del vinculador LNK4049
Advertencia de las herramientas del vinculador LNK4286
dllexport, dllimport