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 中可用?的主要内容,如果未能解决你的问题,请参考以下文章