문제

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 관련 환경 변수 및 경로가 제공되는 수많은 반용 스크립트와 "빌드 환경"콘솔 단축키가 제공됩니다. 이러한 변수를 환경에 삽입하거나 개발자 콘솔을 실행하기 위해 적절한 스크립트를 찾는 것이 좋습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top