用c++扩展python

问题描述

用python脚本写应用比较方便,但有时候由于种种原因需要扩展python(比如给程序提供python接口等)。 之前一直想整理下,今天终于坐下来把这件事情给做了,这里记录下,也方便我以后查阅。

说明: 测试环境中操作系统为CentOS6.5_x64,python版本为2.6

直接调用动态库

1、编写模块动态库文代码

这里以求最大数为示例

代码(callTest1.cpp)如下:

在bash中执行以下命令:

生成动态库文件libcallTest1.so

2、使用python调用动态库

可以通过ctypes调用动态库文件,具体如下:

使用boost库扩展python

这种方式可以直接生成python模块,使用import操作直接导入即可。 当然使用这种方式,需要安装boost库,具体操作这里就不说了,不懂的朋友自己查下。

boost官网:http://www.boost.org/

1、模块代码如下:

文件名:boostCallTest1.cpp

文件内容:

2、编写模块编译脚本

文件名: setup.py

文件内容:

3、编译模块并测试

编译模块

会在build目录产生boostCallTest1.so文件,进入该目录,可如下使用:

使用swig扩展python

SWIG是个帮助使用C或者C++编写的软件能与其它各种高级编程语言进行嵌入联接的开发工具。

SWIG能应用于各种不同类型的语言包括常用脚本编译语言例如Perl, PHP, Python, Tcl, Ruby and PHP。

swig官网: http://www.swig.org/download.html

可以通过yum直接安装:

1、编写程序代码

文件名:swigCall.cpp

内容如下:

2、编写接口文件

文件名:swigCall.i

内容如下:

3、编写Makefile文件

内容如下:

注意:swig命令中要使用-c++参数编译c++代码

使用SIP扩展python

SIP是从SWIG发展而来,专为Python调用C/C++模块使用的。 注意,这里的SIP和voip中的sip不是同一个东西,这里的sip是扩展python用的,voip中的sip是一个通信协议,不要搞混了。

注意:

需要安装python sip库;

1、编写c++模块

1.1 编写头文件

文件名: sipCall.h 文件内容:

1.2 编写模块内容

文件名:sipCall.cpp 文件内容:

2、编写接口文件

文件名:sipCall.sip 文件内容:

3、生存静态库

这里用脚本实现,文件名称:genlib.sh

文件内容:

4、编写configure文件

该脚本用于生成Makefile,内容如下:

5、运行genlib.sh脚本生成lib文件;

6、运行configure.py脚本生成Makefile;

7、运行make生成模块文件(so文件);

8、python测试如下:

0 Likes

你目前的身份是游客,评论请输入昵称和电邮!