没有合适的资源?快使用搜索试试~ 我知道了~
Python调用C++程序的方法详解
25 下载量 113 浏览量
2020-09-21
11:02:07
上传
评论 2
收藏 67KB PDF 举报
温馨提示


试读
4页
主要介绍了Python调用C++程序的方法,文中通过示例代码介绍的详细,相信对大家具有一定的参考借鉴价值,需要的朋友们下面来一起看看吧。
资源推荐
资源详情
资源评论
























Python调用调用C++程序的方法详解程序的方法详解
主要介绍了Python调用C++程序的方法,文中通过示例代码介绍的详细,相信对大家具有一定的参考借鉴价
值,需要的朋友们下面来一起看看吧。
前言前言
大家都知道Python的优点是开发效率高,使用方便,C++则是运行效率高,这两者可以相辅相成,不管是在Python项目中嵌
入C++代码,或是在C++项目中用Python实现外围功能,都可能遇到Python调用C++模块的需求,下面列举出集中c++代码导
出成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.6 -o test1.so
运行Python解释器,测试如下
>>> import test1
>>> test1.Add(1,2)
3
这里要注意一下几点这里要注意一下几点
1. 如果生成的动态库名字为test1,则源文件里必须有inittest1这个函数,且Py_InitModule的第一个参数必须是“test1”,否
则Python导入模块会失败
2. 如果是cpp源文件,inittest1函数必须用extern "C"修饰,如果是c源文件,则不需要。原因是Python解释器在导入库时会
寻找initxxx这样的函数,而C和C++对函数符号的编码方式不同,C++在对函数符号进行编码时会考虑函数长度和参数类
型,具体可以通过nm test1.so查看函数符号,c++filt工具可通过符号反解出函数原型
资源评论


weixin_38562626
- 粉丝: 3
- 资源: 937
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


安全验证
文档复制为VIP权益,开通VIP直接复制
