У меня есть C-Wrapper для моей C ++ Framework. Так как это должно работать на Mac и Windows, я использую scons :
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: спецификация связи противоречит более ранней спецификации для« ... »».
Если я пропущу 'extern "C"', это сработает, но я не вижу .lib-файла, и я почти уверен, что мне это нужно для реального использования библиотеки.