在Python中调用C++,使用SWIG
http://www.coder4.com/archives/2141
SWIG:Simplified Wrapper and Interface Generator,顾名思义,就是将C/C++包装为其他高级语言的Wrapper工具,非常好用。
该项目历史悠久(创始于1995年!),且一直非常活跃,目前最新版本为2011年5月发布的2.0.4。
1、安装SWIG
| 1 2 3 4 5 6 7 | wget http://prdownloads.sourceforge.net/swig/swig-2.0.4.tar.gz tar -xzvf swig-2.0.4.tar.gz cd swig-2.0.4/ #我们这里只编译Python的语言支持,可以根据你得需要加别的! ./configure --without-alllang --with-python|grep python make sudo make install | 
2、C++代码
我们以包装一个简单的类为例子:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include <string> using std::string; class MyObj { public:     string SayHello(string name)     {         string ret("Hello, ");         return ret + name;     } private:     string id; }; | 
3、编写Interface文件
SWIG需要一个intf文件,可以写的很复杂,也可以偷懒:只引用你要Wrap的.h头问件就可以啦!
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | /* myobj.i */ %module myobj %{ /* 相关引用 */ #include "MyObj.h" #include <string> %} /* 对STL的支持 */ %include stl.i /* Wrapper并生成代码 */ %include "MyObj.h" | 
4、生成Wrapper代码
| 1 2 3 4 5 6 7 8 | #生成,第一个python是目标语言,跌入个-c++是启用c++模式 swig -python -c++ ./myobj.i #成功的话,会生成如下文件 myobj.i  myobj_wrap.c  myobj_wrap.cxx #编译,生成so文件,注意一定要用g++而不是ld做Link!! g++ -c myobj_wrap.c myobj_wrap.cxx -I /usr/include/python2.6/ -fPIC g++ -shared myobj_wrap.o -o _myobj.so | 
5、测试
| 1 2 3 4 5 | >>> import myobj >>> o = myobj.MyObj() >>> o.SayHello("ICT") 'Hello, ICT' >>> | 
6、补充
如果你想使用复合类型,例如vector<string>,请务必在.i文件中声明!
| 1 2 3 4 | namespace std{ %template(VectorOfString) vector<string>; } | 
在Python中调用C++,使用SWIG的更多相关文章
- 如何在python中调用C语言代码
		1.使用C扩展CPython还为开发者实现了一个有趣的特性,使用Python可以轻松调用C代码 开发者有三种方法可以在自己的Python代码中来调用C编写的函数-ctypes,SWIG,Python/ ... 
- Python脚本传參和Python中调用mysqldump
		Python脚本传參和Python中调用mysqldump<pre name="code" class="python">#coding=utf-8 ... 
- Django之在Python中调用Django环境
		Django之在Python中调用Django环境 新建一个py文件,在其中写下如下代码: import os if __name__ == '__main__': os.environ.setdef ... 
- (转)python中调用R语言通过rpy2 进行交互安装配置详解
		python中调用R语言通过rpy2 进行交互安装配置详解(R_USER.R_HOME配置) 2018年11月08日 10:00:11 luqin_ 阅读数:753 python中调用R语言通过r ... 
- Python中调用自然语言处理工具HanLP手记
		手记实用系列文章: 1 结巴分词和自然语言处理HanLP处理手记 2 Python中文语料批量预处理手记 3 自然语言处理手记 4 Python中调用自然语言处理工具HanLP手记 5 Python中 ... 
- 使用ctypes在Python中调用C++动态库
		使用ctypes在Python中调用C++动态库 入门操作 使用ctypes库可以直接调用C语言编写的动态库,而如果是调用C++编写的动态库,需要使用extern关键字对动态库的函数进行声明: #in ... 
- [Python-MATLAB] 在Python中调用MATLAB的API
		可以参考官方的说明文档: http://cn.mathworks.com/help/matlab/matlab_external/get-started-with-matlab-engine-for- ... 
- 在python中调用js或者nodejs
		在python中调用js或者nodejs要使用PyExecJs第三方包. pip install pyexecjs 示例代码 >>> import execjs >>&g ... 
- PySpark 的背后原理--在Driver端,通过Py4j实现在Python中调用Java的方法.pyspark.executor 端一个Executor上同时运行多少个Task,就会有多少个对应的pyspark.worker进程。
		PySpark 的背后原理 Spark主要是由Scala语言开发,为了方便和其他系统集成而不引入scala相关依赖,部分实现使用Java语言开发,例如External Shuffle Service等 ... 
- 4.1 python中调用rust程序
		概述 使用rust-cpython将rust程序做为python模块调用: 通常为了提高python的性能: 参考 https://github.com/dgrunwald/rust-cpython ... 
随机推荐
- jquery图片滑动联播效果
			<head> <script src="../Scripts/jquery-1.10.2.js"></script> <meta char ... 
- jquery自动生成二维码
			把下面的jquery代码放到想要在当前页面上面生成二维码: 代码如下: <script type="text/javascript">var _qrContent='' ... 
- 默认安装wamp修改MySQL密码
			首先,通过WAMP打开mysql控制台. 提示输入密码,因为现在是空,所以直接按回车. 然后输入“use mysql”,意思是使用mysql这个数据库,提示“Database changed”就行. ... 
- 【转】The content of element type "configuration" must match "(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?...
			[转]The content of element type "configuration" must match "(properties?,settings?,typ ... 
- SqlServer2005安装错误解决方法
			前段时间在安装数据库SQL Server2005时,在系统检测这一步计算机报了一个错误,提示“性能监视器计数要求(错误)”,使得安装无法继续进行,于是在网上找了些方法来解决,其中有一个方法最有效,在这 ... 
- json解析日期方法 问题的解决方案
			之前在做项目的时候发现,用json格式传输日期数据的时候,发现从数据库中传回到页面的数据出现错误,查阅相关资料才知道,原来json不支持日期解析,要自己解决,解决方案也很简单,写一段js代码就OK了- ... 
- C#学习笔记1:正则表达式和数据库连接
			1.using System.Text.RegularExpressions; 只有导入该命名空间,才能引入Regex对象,IsMatch是Regex中的一个方法,作用是来判断(输入)内容是否满足正则 ... 
- 线程间通信--生产者消费者 升级版JDK5
			import java.util.concurrent.locks.*; /*1.新的解锁,上锁操作,据说是jdk5.0升级版,以前的枷锁,解锁都是隐藏的,默认的,现在变成显式 2.新的异常处理方式 ... 
- QT Slot/Signal
			QT的Slot/Singal-槽/信号 1.Usage/使用方法 所有从 QObject 或其子类 ( 例如 Qwidget) 派生的类都能够包含 信号/signal和 槽/slot.当对象改变其状态 ... 
- POJ3368(RMQ)
			Frequent values Description You are given a sequence of n integers a1 , a2 , ... , an in non-decreas ... 
