可能重复:
Integrate Python And C++
我是python GUY并在django中做网络内容。我想知道使用SWIG集成python和C ++是多么容易或多难。
是否有效/容易做或应该离开C ++并在python中编写代码。
过去的程序员已经编译了一些C ++文件。我知道SWIG用于集成语言,但我不知道使用它有什么实际意义或问题。
或者没有使用它,在Python中重写代码是更好的选择。
答案 0 :(得分:6)
使用swig 轻松。通常比人们想象的容易。 见http://www.swig.org/tutorial.html。
基本上你只需编写一个界面文件 *。i ,它只包含你需要的标题。
example.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()
答案 1 :(得分:3)
我经常使用swig工作,以便将代码翻译成多种语言,这是一个非常有用的工具。
为了了解什么是最适合您的方法,您应该观察您的软件界面。如果c ++类只有接收和返回简单类型(如字符串或stl结构)的方法,那么您可以确信您的代码没有“被唤醒”的问题。当你有复杂的接口时,问题就出现了。
python的另一个问题是GIL的存在,在多线程环境中(在c ++端使用阻塞调用)可能会导致很多问题并涉及复杂的管理(在c ++代码中使用python-dev库)。 / p>
如果您的目标代码仅以python编写,那么建议您看一下boost-python库,这些库更专业,通常更易于使用python。但是,多线程环境的问题仍然存在。
答案 2 :(得分:2)
如何使用SWIG连接python和C ++。 (脸颊)