python调用c++代码的方法

  介绍

这篇文章给大家分享的是有关python调用c++代码的方法的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。

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

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

<强>原生态导出

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

# include & lt; Python.h>   int添加(int x, int y)   {   返回x + y;   }   int德尔(int x, int y)   {   返回x - y;   }   PyObject * WrappAdd (PyObject *自我,PyObject * args)   {   int x, y;   如果(!PyArg_ParseTuple (args,“ii",, x,, y))   {   返回NULL;   }   返回Py_BuildValue(“我,添加(x, y));   }   PyObject * WrappDel (PyObject *自我,PyObject * args)   {   int x, y;   如果(!PyArg_ParseTuple (args,“ii",, x,, y))   {   返回NULL;   }   返回Py_BuildValue(“我,德尔(x, y));   }   静态PyMethodDef test_methods []={   {“Add", WrappAdd METH_VARARGS,“something"},   {“Del", WrappDel METH_VARARGS,“something"},   {零,零}   };   外来的“C"   空白inittest1 ()   {   Py_InitModule (“test1" test_methods);   }

<强>编译命令如下

g++ - fpic - shared test1。cpp - i/usr/include/python2.7 test1 - o。所以

- fpic:生成位置无关目标代码,适用于动态连接;
- l路径:表示在路径目录中搜索库文件,如- l。表示在当前目录;
我路径:表示在路径目录中搜索头文件;
- o文件:制定输出文件为文件;
shared:生成一个共享库文件;

<强>运行Python解释器、测试如下

在祝辞祝辞进口test1   在在在test1.Add (1、2)   3

<>强这里要注意一下几点

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

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

感谢各位的阅读!关于python调用c++代码的方法就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到吧!

python调用c++代码的方法