我正在使用SWIG 3.0.12在Win7上从C ++生成C#包装器。命令是:
swig.exe -c++ -csharp -namespace DS -DWIN32 -outdir D:/DS_CSharp/GeneratedSWIG DS.i
这在窗户上很好用。我们的C ++和SWIG生成了在Visual Studio中编译的包装器,编译后的dll可以用C#代码调用。
现在,我们需要使用gcc和mono将C ++和C#代码移动到Debian 9中。那么在Linux上生成包装器代码的正确命令是什么?
在上面的Win7命令中它有一个宏“WIN32”,我想这在Linux中是不需要的。 Win7上生成的包装器.cxx文件包含许多似乎适用于Windwos或GCC的条件定义,例如:
#ifndef SWIGEXPORT
# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
# if defined(STATIC_LINKED)
# define SWIGEXPORT
# else
# define SWIGEXPORT __declspec(dllexport)
# endif
# else
# if defined(__GNUC__) && defined(GCC_HASCLASSVISIBILITY)
# define SWIGEXPORT __attribute__ ((visibility("default")))
# else
# define SWIGEXPORT
# endif
# endif
#endif
如何为Linux和gcc定义正确的宏?
此外,我们的DS.i文件还有一个与Windows相关的包含,我不确定我们是否也将删除它用于Linux:
%include <windows.i>
%include <std_string.i>
%include <std_wstring.i>
... ...
swig.exe -c++ -csharp -namespace DS -outdir D:/DS_CSharp/GeneratedSWIG DS.i
使用gcc构建生成代码时会自动定义__GNUC__
。这通过在宏定义中添加打印输出来检查,例如, #warning我的消息。