Partager via


Avertissement des outils Éditeur de liens LNK4217

le symbole 'symbol' défini dans 'filename_1.obj' est importé par 'filename_2.obj' dans la fonction 'function'

__declspec(dllimport) a été spécifié pour un symbole même si le symbole est défini dans un fichier objet dans la même image. Supprimez le __declspec(dllimport) modificateur pour résoudre cet avertissement.

Notes

le symbole est le nom de symbole défini dans l’image. est la fonction qui importe le symbole.

Cet avertissement n’apparaît pas lorsque vous compilez à l’aide de l’option /clr .

LNK4217 peut également se produire si vous tentez de lier deux modules ensemble, quand au lieu de cela, vous devez compiler le deuxième module avec la bibliothèque d’importation du premier module.

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

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

Enfin,

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

Si vous tentez de compiler ces deux modules, comme indiqué ici, LNK4217 :

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

Pour corriger l’erreur, après avoir compilé les deux fichiers, passez tt.obj à lib.exe pour créer un fichier .lib, puis liez main.obj avec tt.lib comme indiqué ici :

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

Voir aussi

Avertissement des outils Éditeur de liens LNK4049
Avertissement des outils Éditeur de liens LNK4286
dllexport, dllimport