Microsofti sisemine tugiteave
VEA nr: 101959 (Visual Studio)
Kokkuvõte
Kui loote Microsoft Visual C++ kompilaatori ja Linker 64-bitise versiooni dll-faili, võidakse kuvada Linker tõrkekoodi LNK4197 kui funktsioon on tunnistatud eksportida rohkem kui üks kord.
Sümptomid
Linker väljund võib sarnaneb järgmisega:
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
Põhjus
Linker tõrkekoodi LNK4197 luuakse funktsioon on tunnistatud eksportida rohkem kui üks kord. Funktsioon on kuulutatud ekspordiks ühel järgmistest viisidest:
-
Funktsioon on tunnistatud C lähtefaili __declspec(dllexport) märksõnade abil:
__declspec(dllexport) int DllSample() { return 42;}
-
Funktsioon on tunnistatud abil moodul eraldusvõimega (. DEF) faili:
EXPORTS DllSample
See Linker tõrge võib ilmneda sagedamini kui __declspec(dllexport) märksõna ja. DEF faili abil saate määratleda sama funktsiooni nime saanud. DLL-i projekti.
Lahendus
Selle probleemi lahendamiseks määratlege eksporditud funktsioonide vaid üks kord __declspec(dllexport) märksõnade abil või kasutades a. DEF faili. Ärge kasutage Mõlemad meetodid.
Olek
Selline käitumine on ette nähtud.
Lisateave
Funktsiooni eksportida rohkem kui üks kord kuulutab võib tekitada Linker tõrge, 32-bitised versioonid Microsoft Windowsi C++ kompilaatori ja Linker käesoleva artikli jaotises "Tunnused" kirjeldatud. Microsoft soovitab siiski määratleda funktsiooni eksport vaid üks kord Windowsi C++ kompilaatori ja Linker 32-bitine ja 64-bitised versioonid.