上面罗列出集中c++代码导出成Python接口的办法,一同来学习学习吧。
原生态导出(保举学习:Python视频教程)
Python诠释器就是用C完成,因而只需咱们的C++的数据构造能让Python意识,实践上就是能够被间接挪用的。咱们完成test1.cpp以下
#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); }
编译饬令以下
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诠释器,测试以下
>>> 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 python教程 python编程 python使用问题
抱歉,评论功能暂时关闭!