Fehlermeldung LNK4197 in der 64-Bit-Version von Visual C++-Compiler

Gilt für: Visual C++ 2010 Express

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.