python怎么用c++代码


本文摘自php中文网,作者(*-*)浩,侵删。

大家都知道Python的优点是开发效率高,使用方便,C++则是运行效率高,这两者可以相辅相成,不管是在Python项目中嵌入C++代码,或是在C++项目中用Python实现外围功能,都可能遇到Python调用C++模块的需求.

下面列举出集中c++代码导出成Python接口的方法,一起来学习学习吧。

原生态导出(推荐学习:Python视频教程)

Python解释器就是用C实现,因此只要我们的C++的数据结构能让Python认识,理论上就是可以被直接调用的。我们实现test1.cpp如下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

#include <Python.h>

int Add(int x, int y)

{

return x + y;

}

int Del(int x, int y)

{

return x - y;

}

PyObject* WrappAdd(PyObject* self, PyObject* args)

{

int x, y;

if (!PyArg_ParseTuple(args, "ii", &x, &y))

{

return NULL;

}

return Py_BuildValue("i", Add(x, y));

}

PyObject* WrappDel(PyObject* self, PyObject* args)

{

int x, y;

if (!PyArg_ParseTuple(args, "ii", &x, &y))

{

return NULL;

}

return Py_BuildValue("i", Del(x, y));

}

static PyMethodDef test_methods[] = {

{"Add", WrappAdd, METH_VARARGS, "something"},

{"Del", WrappDel, METH_VARARGS, "something"},

{NULL, NULL}

};

extern "C"

void inittest1()

{

Py_InitModule("test1", test_methods);  

}

编译命令如下

1

g++ -fPIC -shared test1.cpp -I/usr/include/python2.7 -o test1.so

-fPIC:生成位置无关目标代码,适用于动态连接;
-L path:表示在path目录中搜索库文件,如-L.表示在当前目录;
-I path:表示在path目录中搜索头文件;
-o file:制定输出文件为file;
-shared:生成一个共享库文件;

运行Python解释器,测试如下

1

2

3

>>> import test1

>>> test1.Add(1,2)

3

这里要注意一下几点

如果生成的动态库名字为test1,则源文件里必须有inittest1这个函数,且Py_InitModule的第一个参数必须是“test1”,否则Python导入模块会失败

如果是cpp源文件,inittest1函数必须用extern "C"修饰,如果是c源文件,则不需要。原因是Python解释器在导入库时会寻找initxxx这样的函数,而C和C++对函数符号的编码方式不同,C++在对函数符号进行编码时会考虑函数长度和参数类型,具体可以通过nm test1.so查看函数符号,c++filt工具可通过符号反解出函数原型

更多Python相关技术文章,请访问Python教程栏目进行学习!

以上就是python怎么用c++代码的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

Python path怎么设置

Python中lamda函数什么意思

Python 类对象和实例对象动态添加方法

Python中数组,列表:冒号的用法介绍

Python怎么随机产生一个范围内的数

Python如何合并两个列表?

circle是什么意思,3分钟教你用circle画圈

Python简介及入门指导

带你简单了解Python创建神经网络模型的内容

Python ipo模型是指什么

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...