Получавате LNK4197 грешка в 64-битова версия на Visual C++ компилатор

Прилага се за: Visual C++ 2010 Express

Обобщена информация


Когато създавате DLL с помощта на 64-битова версия на Microsoft Visual C++ компилатор и свързване, можете да получите Linker кода на грешка 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++ компилатор и свързване. Обаче Microsoft препоръчва да определите функция износ само веднъж в 32-битови и 64-битовите версии на Windows C++ компилатор и свързване.