python生成动态库在c++中调用
一.Windows下生成动态库.pyd
在setup.py的同目录下使用python setup.py build_ext --inplace
二.在vscode的c++中使用.pyd文件(动态库)
1)配置python的环境
python -c "import sys; print(sys.executable)" #确定python安装位置
2)修改vscode中python的链接关系
2.1)修改tasks.json
2.2)修改launch.json
3)对应的vscode代码:
#include <iostream>
#include <Python.h>
using namespace std;int main() {Py_SetPythonHome(L"D:\\Conda\\envs\\yolo"); // 设置 Python 解释器路径Py_Initialize(); // 初始化 Python 解释器// 添加 .pyd 所在路径到 sys.path//E:\Code\VScode\Project_test\mymodule.cp39-win_amd64.pydPyRun_SimpleString("import sys");PyRun_SimpleString("sys.path.append('E:\\Code\\VScode\\Project_test')");// 导入 .pyd 模块PyObject* pModule = PyImport_ImportModule("mymodule"); // 不带 .pyd 后缀if (!pModule) {PyErr_Print();std::cerr << "Failed to load module\n";return 1;}// 获取函数PyObject* pFunc = PyObject_GetAttrString(pModule, "add"); // 函数名if (PyCallable_Check(pFunc)) {PyObject* pArgs = PyTuple_Pack(2, PyLong_FromLong(10), PyLong_FromLong(32)); //传入两个参数10,32.相加为42PyObject* pValue = PyObject_CallObject(pFunc, pArgs);long result = PyLong_AsLong(pValue);std::cout << "Result from Python: " << result << std::endl;Py_XDECREF(pValue);Py_DECREF(pArgs);} else {PyErr_Print();std::cerr << "Function not callable\n";}Py_XDECREF(pFunc);Py_DECREF(pModule);Py_Finalize(); // 关闭解释器cout<<"hello world";return 0;
}
4)结果: