使用C/C++扩展Python
作者:网络转载 发布时间:[ 2015/8/10 10:26:52 ] 推荐标签:编程语言 测试开发技术
3、编译模块并测试
编译模块:
python setup.py build
会在build目录产生boostCallTest1.so文件,进入该目录,可如下使用:
>>> import boostCallTest1
>>> boostCallTest1.Max(1,3)
3
使用swig扩展python
SWIG是个帮助使用C或者C++编写的软件能与其它各种高级编程语言进行嵌入联接的开发工具。
SWIG能应用于各种不同类型的语言包括常用脚本编译语言例如Perl, PHP, Python, Tcl, Ruby and PHP。
swig官网: http://www.swig.org/download.html
可以通过yum直接安装:
yum install swig
1、编写程序代码
文件名:swigCall.cpp
内容如下:
int Max(int i1,int i2)
{
return (i1>i2)?i1:i2;
}
2、编写接口文件
文件名:swigCall.i
内容如下:
%module swigCall
%{
extern int Max(int i1,int i2);
%}
extern int Max(int i1,int i2);
3、编写Makefile文件
内容如下:
all:
make swigCall
swigCall:
swig -python -c++ swigCall.i
g++ -c swigCall.cpp swigCall_wrap.cxx -I/usr/include/python2.6/ -fPIC
g++ -shared swigCall.o swigCall_wrap.o -o _swigCall.so
clean:
rm -f swigCall_wrap.c*
rm -f *.py*
rm -f *.so
rm -f *.o
注意: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 文件内容:
class TestMode
{
public:
int Max(int i1,int i2);
};
1.2 编写模块内容
文件名:sipCall.cpp 文件内容:
#include "sipCall.h"
int TestMode::Max(int i1,int i2)
{
return (i1>i2)?i1:i2;
}
2、编写接口文件
文件名:sipCall.sip 文件内容:
%Module TestMode
class TestMode {
%TypeHeaderCode
#include "sipCall.h"
%End
public:
int Max(int i1,int i2);
};
3、生存静态库
这里用脚本实现,文件名称:genlib.sh
文件内容:
#! /bin/bash
g++ -c -fPIC sipCall.cpp
ar -crs libsipCall.a sipCall.o
4、编写configure文件
该脚本用于生成Makefile,内容如下:
#! /usr/bin/env python
import os
import sipconfig
build_file = "sipCall.sbf"
config = sipconfig.Configuration()
cmd = " ".join([config.sip_bin, "-c", ".", "-b", build_file, "sipCall.sip"])
os.system(cmd)
makefile = sipconfig.SIPModuleMakefile(config, build_file)
makefile.extra_libs = ["sipCall"]
makefile.LIBDIR.append(".")
makefile.generate()
5、运行genlib.sh脚本生成lib文件;
6、运行configure.py脚本生成Makefile;
7、运行make生成模块文件(so文件);
8、python测试如下:
>>> import TestMode
>>> dir(TestMode)
['TestMode', '__doc__', '__file__', '__name__', '__package__']
>>> s = TestMode.TestMode()
>>> s.Max(1,3)
3
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11热门文章
常见的移动App Bug??崩溃的测试用例设计如何用Jmeter做压力测试QC使用说明APP压力测试入门教程移动app测试中的主要问题jenkins+testng+ant+webdriver持续集成测试使用JMeter进行HTTP负载测试Selenium 2.0 WebDriver 使用指南