Shrnutí
Při pomocí 64bitové verze kompilátoru Microsoft Visual C++ a propojovací program sestavení knihovny DLL, propojovací program číslo chyby LNK4197 můžete obdržet, pokud byla deklarována funkce pro export více než jednou.
Příznaky
Výstupní propojovací program může být podobná následující:
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říčina
Číslo chyby LNK4197 propojovací program vygeneruje, když byla deklarována funkce pro export více než jednou. Funkce je deklarována pro export v jednom z následujících způsobů:
-
Funkce je deklarována pomocí klíčového slova __declspec(dllexport) C zdrojový soubor:
__declspec(dllexport) int DllSample() { return 42;}
-
Funkce je deklarována pomocí definice modulu (. Soubor DEF):
EXPORTS DllSample
Propojovací program chybu dochází nejčastěji při obou klíčové slovo __declspec(dllexport) a. Slouží k definování názvu funkce v souboru .def. Projekt knihovny DLL.
Řešení
Chcete-li tento problém vyřešit, definovat exportovaných funkcí pouze jednou, pomocí klíčového slova __declspec(dllexport) nebo pomocí. DEF souboru. Nepoužívejte obě tyto metody.
Stav
Toto chování je záměrné.
Další informace
Deklarování funkce pro export více než jednou, nemusí poskytovat Linker chyba, která je popsána v části "Příznaky" tohoto článku v 32bitové verze systému Microsoft Windows C++ kompilátoru a propojovacího programu. Společnost Microsoft však doporučuje definovat funkci vývoz pouze jednou v 32bitových a 64bitových verzích systému Windows C++ kompilátoru a propojovacího programu.