SWIG:你能否使用 SWIG 专门使用 C++ 头文件使 C++ 在 Python 中可用?

Posted

技术标签:

【中文标题】SWIG:你能否使用 SWIG 专门使用 C++ 头文件使 C++ 在 Python 中可用?【英文标题】:SWIG: Can you make C++ usable in Python using exclusively the C++ header file using SWIG? 【发布时间】:2016-06-30 19:53:58 【问题描述】:

我正在尝试学习如何使用 SWIG,并且想知道我是否正在执行一些我不需要执行的额外步骤。我目前有文件 Dog.cpp、Dog.h 和 Dog.i。我正在尝试使用 SWIG 包装 Dog.cpp 以在 Python 中使用。我的接口文件 Dog.i 如下所示:

%module Dog
%
#include "Dog.h"
%

%include "Dog.h"

我目前通过在命令行上执行以下步骤来创建 python 包装器:

swig -c++ -python Dog.i

g++ -fpic -c Dog.cpp

g++ -fpic -c Dog_wrap.cxx -I /usr/include/python2.7

g++ -shared Dog.o Dog_wrap.o -o _Dog.so

我的问题是,有没有办法在完全不引用 Dog.cpp 的情况下创建 python 包装器?例如,如果我不知道 Dog.cpp 的位置,有没有办法让我仍然可以正常工作?谢谢!

【问题讨论】:

【参考方案1】:

我的问题是,有没有办法在不引用 Dog.cpp 的情况下创建 python 包装器?

只有在创建两个 DLL/共享库时才能这样做。一个 DLL/共享库可以具有对应于 Dog.cpp 的目标代码,而第二个 DLL/共享库可以具有 Python 包装代码。

如果要创建一个 DLL/共享库或可执行文件,则必须将 Dog.cpp 中的目标代码与 Python 包装器中的目标代码链接起来。

Python 包装器代码以这种方式命名是有原因的。它只是 Dog.cpp 中代码的包装器。

【讨论】:

以上是关于SWIG:你能否使用 SWIG 专门使用 C++ 头文件使 C++ 在 Python 中可用?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SWIG 从 C++ 调用 Java?

在 C++ 中使用 SWIG

如何使用 SWIG 在 C++ API 上生成 C 包装器? [复制]

如何使用swig为c++生成php接口so

使用 SWIG 跨 C++ 和 Ruby 的多态性

使用 SWIG 在 Java 和 C++ 之间传递缓冲区