Rezime
Kada pravite DLL datoteku pomoću 64-bitne verzije Microsoft Visual C++ prevodilac i Linker, Linker broj greške LNK4197 možete dobiti ako funkcija je proglašen za izvoz više od jednog puta.
Simptomi
Linker izlaz može biti slična ovoj:
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
Uzrok
Linker broj greške LNK4197 se generiše kada funkcija je proglašen za izvoz više od jednog puta. Funkcija je deklarisana za izvoz na jedan od sledećih načina:
-
Funkcija je deklarisana koristeći ključnu reč __declspec(dllexport) u tvoj C izvorne datoteke:
__declspec(dllexport) int DllSample() { return 42;}
-
Funkcija je deklarisana pomoću definicije modula (. DEF) datoteka:
EXPORTS DllSample
Ove Linker greške može doći najčešće kada oboje __declspec(dllexport) ključnu reč i je. DEF datoteke se koriste za definisanje isto ime funkcije u jedan. DLL datoteka projekta.
Rešenje
Da biste riješili ovaj problem, definisanje izvezene funkcije samo jednom i pomoću ključne reči __declspec(dllexport) ili koristeći neki. DEF datoteku. Ne koristite oba ova metoda.
Status
Ovo ponašanje je tako dizajnirano.
Više informacija
Proglašenja funkciju za izvoz više od jednom ne mogu da proizvedu Linker grešku koja je opisana u odjeljku „Simptomi” ovog članka u 32-bitnim verzijama sustava Microsoft Windows C++ prevodilac i Linker. Međutim, Microsoft preporučuje da definišete funkciju izvoza samo jednom u 32-bitnim i 64-bitnim verzijama sistema Windows C++ prevodilac i Linker.