我的 C++ 框架有一个 C-Wrapper。因为这应该在 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 文件,我很确定我需要它才能真正使用该库。