使用C/C++扩展Python
作者:网络转载 发布时间:[ 2015/8/10 10:26:52 ] 推荐标签:编程语言 测试开发技术
用python脚本写应用比较方便,但有时候由于种种原因需要扩展python(比如给程序提供python接口等)。 之前一直想整理下,终于坐下来把这件事情给做了,这里记录下,也方便我以后查阅。
说明: 测试环境中操作系统为CentOS6.5_x64,python版本为2.6
直接调用动态库
1、编写模块动态库文代码
这里以求大数为示例
代码(callTest1.cpp)如下:
extern "C"
{
int Max(int i1,int i2)
{
return (i1>i2)?i1:i2;
}
}
在bash中执行以下命令:
g++ -fPIC -shared -o libcallTest1.so callTest1.cpp
生成动态库文件libcallTest1.so
2、使用python调用动态库
可以通过ctypes调用动态库文件,具体如下:
#! /usr/bin/env python
from ctypes import *
import os
so1 = CDLL(os.getcwd() + '/libcallTest1.so')
print so1.Max(1,3)
使用boost库扩展python
这种方式可以直接生成python模块,使用import操作直接导入即可。 当然使用这种方式,需要安装boost库,具体操作这里不说了,不懂的朋友自己查下。
boost官网:http://www.boost.org/
1、模块代码如下:
文件名:boostCallTest1.cpp
文件内容:
int Max(int i1,int i2)
{
return (i1>i2)?i1:i2;
}
#include <boost/python/module.hpp>
#include <boost/python/def.hpp>
using namespace boost::python;
BOOST_PYTHON_MODULE(boostCallTest1)
{
def("Max",Max);
}
2、编写模块编译脚本
文件名: setup.py
文件内容:
#!/usr/bin/env python
from distutils.core import setup
from distutils.extension import Extension
setup(name="PackageName",
ext_modules=[
Extension("boostCallTest1", ["boostCallTest1.cpp"],
libraries = ["boost_python"])
])
相关推荐
更新发布
功能测试和接口测试的区别
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