(1)基于python引用C++脚本
》pybind11
安装
###源码安装
git clone https://github.com/pybind/pybind11.git
cd pybind11
cmake -S . -B build
cmake --build build -j 2 # Build on 2 cores
sudo cmake --install build
###pip安装
pip install pybind11
具体使用示例:
函数实现(函数带参,函数不带参,类的实现)
#include <pybind11/pybind11.h>
#include <iostream>
namespace py = pybind11;
int add(int i, int j) {
return i + j;
}
void f(){
std::cout<<"hello test_demo"<<std::endl;
}
class MyMath {
public:
MyMath(int initial_value) : value(initial_value) {}
int add(int i) {
return value + i;
}
private:
int value;
};
PYBIND11_MODULE(example, m) {
m.doc() = "pybind11 example plugin"; // 可选模块
m.def("add", &add, "A function that adds two numbers");
m.def("f",&f,"just for test");
py::class_<MyMath>(m, "MyMath")
.def(py::init<int>(), "Initialize the MyMath class with an integer value.")
.def("add", &MyMath::add, "Add an integer to the internal value and return the result.");
}
这里用到PYBIND11_MODULE的宏,第一个参数是你想生成的模块名字(需要与后面编译生成的名一致),第二个其实是一个pybind11::module类型,m.doc后面填对于这个模块的解释,m.def后面第一个参数是你想在python里写的函数名,第二个参数是绑定的函数地址,后面是对函数的解释可写可不写,有几个函数实现就添加几个m.def功能。接下来就是CMakeLists.txt的编写,
cmake_minimum_required(VERSION 3.10) #这个也可以不写
project(test) #定义工程名字
#如果想要指定找的python解释器,可以设置Python_ROOT_DIR路径,如下所示,可以根据whereis python来查看