Linux中QT添加.so库与Python库
一、如何导入.so库
1.1 不同系统中 库名称各有不同
例如: Windows 中为 dll、Linux 中为 so 等
1.2 Linux中的QT导入库方法:
打开QT点击文件右键选择ADD Library 进入到该界面
以上添加库函数成功,在Windows中操作同理
二、调用Python
2.1 添加Python库
下图为Linux中调用的地址找到 .so 文件添加即可,Windows方式也大致相同。
INCLUDEPATH += -I /usr/include/python2.7/
LIBS += /usr/lib/python2.7/config-aarch64-linux-gnu/libpython2.7.so
2.2 创建Python文件 引入头文件
2.2.1 创建Python文件
当前我们用add这个函数来演示功能,将python文件内容写好后我们进入下一步
2.2.2 引入头文件
#include <Python.h> //没有报错,即为成功
2.3 调用Python文件
2.3.1 调用Python函数
获取Python文件路径 是将创建的python文件放到 debug/release 文件下 也就是可执行文件
//进行初始化
Py_Initialize();
if (!Py_IsInitialized()) {
qDebug()<<"cant open python Py_IsInitialized")<<endl;;
return;
}
//获取python文件路径
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append('./')");
//加载Python模块
PyObject* pModule = PyImport_ImportModule("gpio_inout");
if (!pModule) {
qDebug()<<"cant open python pModule")<<endl;;
return;
}
//加载Python模块中的函数
PyObject* pGetFun = PyObject_GetAttrString(pModule,"add");
if (!pGetFun ) {
qDebug()<<"cant open python pGetFun ")<<endl;;
return;
}
2.3.2 对Python函数传参
//新建组,存放参数
PyObject *fun2 = PyTuple_New(2);
//参数赋值
int ia=1,ib=2;
//对add函数传入 第一个参数与第二个参数
PyTuple_SetItem(fun2 ,0,Py_BuildValue("i",ia)); //其中的i代表int d为double
PyTuple_SetItem(fun2 ,1,Py_BuildValue("i",ib));
2.3.3 获取函数返回值
//接收返回值
PyObject *pReturn1 = PyEval_CallObject(pGetFun,fun2);
//转换为C++的对应数据类型
int iout;
PyArg_Parse(pReturn1, "i", &iout);
//打印输出
Debug()<<"iout:"<<iout<<endl;
//初始化结束
Py_Finalize();
2.3.4 输出显示
输出代码 为相加结果 与hello world! 与 传入对应参数
三、完整代码
//进行初始化
Py_Initialize();
if (!Py_IsInitialized()) {
qDebug()<<"cant open python Py_IsInitialized")<<endl;;
return;
}
//获取python文件路径
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append('./')");
//加载Python模块
PyObject* pModule = PyImport_ImportModule("gpio_inout");
if (!pModule) {
qDebug()<<"cant open python pModule")<<endl;;
return;
}
//加载Python模块中的函数
PyObject* pGetFun = PyObject_GetAttrString(pModule,"add");
if (!pGetFun ) {
qDebug()<<"cant open python pGetFun ")<<endl;;
return;
}
//新建组,存放参数
PyObject *fun2 = PyTuple_New(2);
//参数赋值
int ia=1,ib=2;
//对add函数传入 第一个参数与第二个参数
PyTuple_SetItem(fun2 ,0,Py_BuildValue("i",ia)); //其中的i代表int d为double
PyTuple_SetItem(fun2 ,1,Py_BuildValue("i",ib));
//接收返回值
PyObject *pReturn1 = PyEval_CallObject(pGetFun,fun2);
//转换为C++的对应数据类型
int iout;
PyArg_Parse(pReturn1, "i", &iout);
//打印输出
Debug()<<"iout:"<<iout<<endl;
//初始化结束
Py_Finalize();
以上为整套流程演示