Sažetak
Kada DLL izgraditi korištenjem 64-bitnu verziju Microsoft Visual C++ kompilator i poveznik, možda ćete primiti poveznik broj pogreške LNK4197 Ako funkciju deklariraju za izvoz više vremena.
Simptomi
Poveznik Izlaz možda sličnu sljedećoj:
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
Poveznik broj pogreške LNK4197 generira se kada se deklariraju funkciju za izvoz više vremena. Funkcija deklarirana za izvoz na jedan od sljedećih načina:
-
Je funkcija deklarirana pomoću __declspec(dllexport) ključnih riječi u izvornoj datoteci C:
__declspec(dllexport) int DllSample() { return 42;}
-
Je funkcija deklarirana pomoću definicije modula (. Datoteka ZADA):
EXPORTS DllSample
Ova pogreška poveznik najčešće može doći kada oba __declspec(dllexport) ključnu riječ i u. ZADA datoteka koristi za definiranje isti naziv funkcije u u. DLL projekt.
Rješenje
Da biste riješili taj problem, definirati izvezene funkcije samo jedan put pomoću __declspec(dllexport) ključnih riječi ili pomoću na. ZADA datoteka. Nemojte koristiti obje ove metode.
Status
Ovo je zadano ponašanje dizajna.
Dodatne informacije
Objava funkcija za izvoz više vremena može proizvesti poveznik pogreške opisane u odjeljku "Simptomi" ovog članka u 32-bitne verzije sustava Microsoft Windows C++ kompilator i poveznik. Međutim, Microsoft preporučuje funkcija izvozi samo jedanput definirati u 32-bitnim i 64-bitnim verzijama sustava Windows C++ kompilator i poveznik.