Microsofts interne støtteinformasjon
Feil #: 101959 (Visual Studio)
Sammendrag
Når du bygger en DLL-fil ved hjelp av 64-biters versjonen av Microsoft Visual C++ kompilatoren og Linker, kan du få Linker feilnummer LNK4197 Hvis en funksjon er deklarert for eksport mer enn én gang.
Symptomer
Linker-utdata kan ligne på følgende:
C:\>link /NOLOGO /def:Sample.def /pdb:Sample.pdb /out:Sample.dll Sample.obj
Sample.obj : warning LNK4197: export 'DllSample' specified multiple times; using first specification
Creating library Sample.lib and object Sample.exp
Årsak
Linker feilnummer LNK4197 genereres når en funksjon er deklarert for eksport mer enn én gang. En funksjon er deklarert for eksport i én av følgende måter:
-
Funksjonen er Deklarer ved hjelp av __declspec(dllexport) -nøkkelordet i C-kildefilen:
__declspec(dllexport) int DllSample()
{
return 42;
} -
Funksjonen er Deklarer ved hjelp av en modul-definisjon (. DEF)-fil:
EXPORTS
DllSample
Denne Linker kan det oppstå feil oftest når begge nøkkelordet __declspec(dllexport) og en. DEF-filen brukes til å definere det samme funksjonsnavnet i en. DLL-prosjekt.
Løsning
Hvis du vil løse dette problemet, definere eksporterte funksjoner bare én gang ved hjelp av __declspec(dllexport) -nøkkelordet eller ved hjelp av en. DEF-filen. Ikke bruke begge disse metodene.
Status
Denne virkemåten er standard.
Hvis du vil ha mer informasjon
Deklarerer en funksjon for eksport mer enn én gang kan ikke gi Linker-feilen som er beskrevet i delen "Symptomer" i denne artikkelen i 32-biters versjoner av Microsoft Windows C++ kompilatoren og Linker. Microsoft anbefaler imidlertid at du definerer funksjonen Eksporter bare én gang i både 32-biters og 64-biters versjoner av Windows C++ kompilatoren og Linker.