문제
C ++ 프레임 워크에 대한 C- 래퍼가 있습니다. 이것은 Mac과 Windows에서 실행되므로 사용 중입니다. 스콘:
env = Environment()
env.Append(CPPPATH = ['./'])
env.Append(LIBS = 'kernel32.lib')
env.Append(LIBPATH = 'C:/Program Files/Microsoft SDKs/Windows/v6.0A/Lib')
env.SharedLibrary(target='warpLib', source='warplib.cpp')
간단한 버전의 warplib.cpp 및 warplib.h는 다음과 같습니다.
warplib.cpp
#define DllExport __declspec( dllexport )
#include "warplib.h"
extern "C" {
DllExport int foo(int a) {
return a;
}
}
warplib.h
#define DllExport __declspec( dllexport )
extern "C" {
DllExport int foo(int a);
}
아무도 그게 무슨 문제가 있는지 말해 줄 수 있습니까? 나는 'extern "c"'의 거의 모든 조합을 시도했지만 항상 "오류 C2732 : Linkage Specification은 '...'에 대한 이전 사양과 같은 것을 던졌습니다.
'extern "c"'를 건너 뛰면 작동하지만 .lib 파일이 없으며 라이브러리를 실제로 사용해야한다고 확신합니다.
해결책
당신은 만 필요합니다 extern "C"
선언에서. 그런 다음 해당 헤더를 포함하여 누구나 C ++ 장식 형식이 아닌 C 연결 표준을 사용하여 연결해야합니다. 그만큼 warplib.cpp
소스 파일 및 후속 객체 파일은 함수를 노출시킵니다. foo
정확하게 warplib.h
포함되어 있습니다.
MSVC를 사용할 때는 다양한 DEV 관련 환경 변수 및 경로가 제공되는 수많은 반용 스크립트와 "빌드 환경"콘솔 단축키가 제공됩니다. 이러한 변수를 환경에 삽입하거나 개발자 콘솔을 실행하기 위해 적절한 스크립트를 찾는 것이 좋습니다.
제휴하지 않습니다 StackOverflow