Zusammenfassung
Beim Erstellen einer DLL mit der 64-Bit-Version von Microsoft Visual C++-Compiler und Linker möglicherweise Linker Fehlernummer LNK4197 eine Funktion für den Export mehrmals deklariert wurde.
Problembeschreibung
Die Linker-Ausgabe möglicherweise ähnlich der folgenden:
C:\>link /NOLOGO /def:Sample.def /pdb:Sample.pdb /out:Sample.dll Sample.objSample.obj : warning LNK4197: export 'DllSample' specified multiple times; using first specification Creating library Sample.lib and object Sample.exp
Ursache
Der Linker die Fehlernummer LNK4197 wird generiert, wenn eine Funktion für den Export mehrmals deklariert wurde. Eine Funktion wird für den Export in eine der folgenden Arten deklariert:
-
Die Funktion wird mit __declspec(dllexport) -Schlüsselwort in der C-Quelldatei deklariert:
__declspec(dllexport) int DllSample() { return 42;}
-
Die Funktion wird mit einer Moduldefinition deklariert (. DEF)-Datei:
EXPORTS DllSample
Dieser Linkerfehler kann häufig auftreten, wenn sowohl das __declspec(dllexport) -Schlüsselwort und. DEF-Datei wird in denselben Funktionsnamen definiert ein. DLL-Projekt.
Fehlerbehebung
Um dieses Verhalten zu beheben, definieren Sie exportierte Funktionen nur einmal das __declspec(dllexport) -Schlüsselwort verwenden oder mithilfe einer. DEF-Datei. Verwenden Sie nicht beide Methoden.
Status
Es handelt sich hierbei um ein beabsichtigtes Verhalten.
Weitere Informationen
Eine Funktion für den Export nur einmal deklarieren kann nicht im Abschnitt "Symptome" dieses Artikels in 32-Bit-Versionen von Microsoft Windows C++ Compiler und Linker beschrieben die Linkerfehler führen. Microsoft empfiehlt jedoch 32-Bit- und 64-Bit-Versionen von Windows C++ Compiler und Linker Funktion exportiert nur einmal definieren.