Аннотация
При построении библиотеки DLL с помощью 64-разрядной версии Microsoft Visual C++ компилятора и компоновщика появляется компоновщика LNK4197 номер ошибки, если функция объявлена для экспорта более чем один раз.
Проблемы
Выходных данных компоновщика может быть следующее:
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
Причина
Компоновщика LNK4197 номер ошибки создается, когда функция объявлена для экспорта более чем один раз. Функция объявлена для экспорта в один из следующих способов:
-
Функция объявлена с помощью ключевого слова __declspec(dllexport) в исходном файле C:
__declspec(dllexport) int DllSample() { return 42;}
-
Функция объявлена с помощью определения модуля (. Файл DEF):
EXPORTS DllSample
Эта ошибка компоновщика возникает чаще всего при обоих ключевое слово __declspec(dllexport) и. DEF-файла используются для определения с тем же именем функции. Проект библиотеки DLL.
Решение
Для решения этой проблемы необходимо определить экспортируемые функции с только один раз, с помощью ключевого слова __declspec(dllexport) или с помощью. DEF-файла. Не следует использовать оба этих метода.
Статус
Данное поведение является особенностью.
Дополнительная информация
Объявление функции для экспорта более чем один раз может привести к ошибке компоновщика, описанное в разделе «Проблема» данной статьи в 32-разрядных версий Microsoft Windows C++ компилятора и компоновщика. Тем не менее Корпорация Майкрософт рекомендует определить экспортируемые функции только один раз в 32-разрядных и 64-разрядных версиях Windows C++ компилятора и компоновщика.