当它可以在Win7上正确生成时,如何使用SWIG在Linux上生成C#

时间:2019-02-21 20:08:38

标签: c++ linux debian swig

我正在使用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

1 个答案:

答案 0 :(得分:0)

swig.exe -c++ -csharp -namespace DS -outdir D:/DS_CSharp/GeneratedSWIG DS.i

使用gcc构建生成的代码时,会自动定义__GNUC__。这可以通过在宏定义中添加打印输出来检查,例如#警告我的消息。