요약
Microsoft Visual C++ 컴파일러 및 링커 64 비트 버전을 사용 하 여 DLL을 빌드할 때 링커 오류 번호 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 만들어집니다. 내보내기 함수를 선언 하는 다음 방법 중 하나.
-
이 함수는 C 소스 파일에서 __declspec (dllexport) 키워드를 사용 하 여 선언 됩니다.
__declspec(dllexport) int DllSample() { return 42;}
-
함수 선언 된 모듈 정의 (. DEF) 파일:
EXPORTS DllSample
이 링커 오류가 자주 발생할 경우 __declspec (dllexport) 키워드와. DEF 파일에서 이름이 같은 함수가 정의 하에 사용 되는. DLL 프로젝트입니다.
해결 방법
이 문제를 해결 하려면 내보내기 함수 정의 한 번만 또는 __declspec (dllexport) 키워드를 사용 하 여 사용 하 여 한. DEF 파일에 있는입니다. 이 두 가지이 방법을 사용 하지 마십시오.
상태
이 동작은 의도된 것입니다.
추가 정보
한 번 이상 내보내기 함수의 선언 32 비트 버전의 Microsoft Windows c + + 컴파일러와 링커는이 문서의 "현상" 절에서 설명한 링커 오류를 생성할 수 있습니다. 32 비트와 64 비트 버전의 Windows c + + 컴파일러 및 링커 함수 내보내기 한 번만 정의 하는 것이 좋습니다.