我正在使用SWIG 3.0.12在Win7上从C ++生成C#包装器。 命令是:
[['x', 'h', 'm', 's'], ['e', 'r', 'm', 'e'], ['u', 't', 'x', 'e'], ['l', 'x', 'c', 'x'], ['x', 'c', 'y', 'a'], ['y', 'y', 'e', 'x'], ['t', 'u', 'o', 'x'], ['p', 'r', 'k', 'p'], ['v', 'n', 'x', 'a'], ['n', 'h', 'e', 'x']]
在Windows上可以正常工作。我们的C ++和SWIG生成的包装器是在Visual Studio中编译的,编译的dll可以用C#代码调用。
现在,我们需要使用gcc和mono将C ++和C#代码移动到Debian 9中。那么在Linux上生成包装器代码的正确命令是什么?
在上面的Win7命令中,它具有一个宏“ WIN32”,我想这在Linux中是不需要的。 Win7上生成的包装器.cxx文件包含许多条件定义,这些条件定义似乎适用于Windwos或GCC,例如:
swig.exe -c++ -csharp -namespace DS -DWIN32 -outdir D:/DS_CSharp/GeneratedSWIG DS.i
如何为Linux和gcc定义正确的宏?
此外,我们的DS.i文件还包含一个与Windows相关的包含文件,我不确定是否还要删除Linux的文件:
#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
答案 0 :(得分:0)
swig.exe -c++ -csharp -namespace DS -outdir D:/DS_CSharp/GeneratedSWIG DS.i
使用gcc构建生成的代码时,会自动定义__GNUC__
。这可以通过在宏定义中添加打印输出来检查,例如#警告我的消息。