前言:
因为最近c++下的工程需要在python下调用,所以需要把c++编译成可供python调用的库,记录一下具体做法:
编译c++有多种方法,因为我的是cmake构建的工程,所以直接在cmake的基础上编译成python库(c++中用了第三方库opencv和boost)
下载编译pybind11
下载pybind11:git clone https://github.com/pybind/pybind11.git
安装pytest: pip install pytest
编译:
cd pybind11
mkdir build
cd build
cmake ..
cmake --build . --config Release --target check
操作C++代码
我的做法是将编译好的pybind11文件夹拷贝到了c++工程目录下(这样是方便在编译c++的时候能找到pybind11,当然你也可以通过其他方式,只要能找到pybind11就行)
(我只封装了所需要的函数接口)
将你需要的函数接口定义在一个.cpp文件中,比如说,我在pcc.cpp文件中定义了两个函数(该包含的.h文件就正常包含):
int pcc_encoder() 和 int pcc_decoder()
然后在此文件中加入如下代码:
#include <pybind11/pybind11.h>
namespace py = pybind11;
PYBIND11_PLUGIN(Pypcc) {
py::module m("Pypcc", "pcc python module");
m.def("pcc_encoder", &pcc_encoder, "Encoder the pointcloud data");
m.def("pcc_decoder", &pcc_decoder, "Decoder the pointcloud data");
return m.ptr();
}
其中比较重要的是这两句