我如何将c++和Python与SWIG集成
How Can i integrate c++ and Python with SWIG
可能重复:
集成Python和C++
我是巨蟒GUY,在django做网络工作。我想知道使用SWIG集成python和C++有多难。
它是高效/容易做到的,还是应该离开C++,用python来编写代码。
有些C++文件已经被过去的程序员编码过了。我知道SWIG是用来集成语言的,但我不知道使用它有什么实际意义或问题
或者它没有用处,用Python重写代码是更好的选择。
使用swig很容易。通常比人们想象的要容易。看见http://www.swig.org/tutorial.html.
基本上,您只需要编写一个接口文件*.i,其中只包含您需要的头
示例.i:
%module example
%{
/* Includes the header in the wrapper code */
#include "header.h"
%}
/* Parse the header file to generate wrappers */
%include "header.h"
然后使用SWIG生成一个包装器。用你的c++代码编译它,你就完成了:
$ swig -python example.i
$ g++ -c example.cc example_wrap.cc
-I/usr/local/include/python2.1
$ ld -shared example.o example_wrap.o -o _example.so
你有你的python模块。
>>> import example
>>> example.foo()
我经常使用swig来将代码翻译成多种语言,这是一个非常有用的工具。
为了了解什么是最适合你的方法,你应该观察你的软件界面。如果您的c++类具有只接收和返回简单类型(如字符串或stl结构(的方法,那么您可以确信您的代码不会出现"swigged"问题。当你有复杂的接口时,问题就会出现。
python的另一个问题是GIL的存在,在多线程环境中(在c++端有阻塞调用(可能会导致很多问题,并涉及复杂的管理(在c++代码中使用python开发库(。
如果你的目标代码只用python编写,建议你看看boost python库,因为它们更专业,通常更容易与python一起使用。然而,多线程环境的问题仍然存在。
如何使用SWIG接口python和C++。(开玩笑(
- 生成一个表示某些C++头的.i文件。即使SWIG解析(试图解析(您的头文件,它仍然需要一个SWIG接口文件来告诉SWIG要导入什么
- 解决方案:简单!告诉您的一个项目成员编写一个C++头文件解析器来生成.i文件
- 下一个运行swig对该.i文件
- 然后看着它失败
- 编辑头文件并插入#ifndef SWIG#围绕SWIG不理解的代码的endif
- 冲洗并重复
- 一旦它工作起来,请观察50行的c++头文件膨胀为一个5000多行的swig.cpp文件和一个稍小的.py文件
- 对所有要包装的头文件执行相同操作
- 使用python可调用的钩子编译新的和改进的C++应用程序
- 去吃午饭吧。编译和链接不会很快完成
相关文章:
- Python 3.7 和 excess_args 的 SWIG 问题
- 元组由 Swig 生成的 Python 包装器返回,用于C++向量
- 无法使用 SWIG 在 Python 中实例化C++类(获取属性错误)
- 从 C++ 到 Python 的 SWIG:未定义的符号导入问题
- 如何使用 swig C++命名空间作为 python 模块公开
- 分解SWIG Python接口 - 容器会产生命名空间冲突
- 如何制作一个满足SWIG中接口的python类
- 在python docker镜像上安装simstring(SWIG)
- SWIG c++到python:向量问题
- 如何使用 SWIG 接口访问 python 中的 C++ typedef'd 结构
- 方法 argv[] SWIG C++ / Python 中的错误,会发生什么?
- Swig/python : 什么时候需要 SWIG_init() ?
- python 和 swig 版本兼容性问题
- C++ 使用 SWIG 和 Visual Studio 2017 在 python 中导入 DLL
- Swig:在Python中使用c ++ STL复合体
- C++类在Python中使用SWIG的奇怪行为
- 使用 SWIG 绑定 Python/C++ 模板
- 在python swig中读取c ++ 2d数组
- Python swig包装的向量的向量的双显示为元组
- Python/SWIG类型错误