python调用C++编译的动态库中函数记录

1. 引言

在深度学习模型部署上经常需要用到python来处理C++推理后的模型后处理部分,那么就可以用到pybind11来对C++代码封装成动态库,方便python进行后处理操作

本验证demo的文件组成:
在这里插入图片描述

2.pybind11准备

首先安装一下对应包:

pip install pytest

然后,下载pybind11的源码:

git clone https://github.com/pybind/pybind11.git

进入下载好的pybind11目录中,依次执行cmake和make操作:

mkdir build
cd build
cmake ..
cmake --build . --config Release --target check

3. 准备c++代码

这里提供一个官方的简单代码example.cpp:

#include <pybind11/pybind11.h>
namespace py = pybind11;

int add(int i, int j) {
    
    
    return i + j;
}

int sub(int i, int j) {
    
    
    return i *j;
}

PYBIND11_MODULE(example, m) {
    
    
    m.doc() = "pybind11 example plugin"; // optional module docstring

    m.def("add", &add, "A function which adds two numbers");

    m.def("sub", &sub, "A function which subtracts two numbers");
}

4.CMakeLists.txt 制作

cmake_minimum_required(VERSION 3.10)
project(example)   

add_subdirectory(pybind11)  # 添加一个子目录并构建该子目录 ,子目录下应该包含cmakelist.txt和代码文件
pybind11_add_module(example example.cpp)

# pybind11 文件夹是在当前目录下CMakeLists.txt下的pybind11源码,并且经过cmake和make操作

5.执行编译,生成动态库so文件

在example.py 同级目录下,执行下面操作

mkdir build
cd build
cmake ..
make

6. test.py 示例代码

import example

result_1 = example.add(3,4)
print(result_1)
result_2 = example.sub(3,4)
print (result_2)

7. 将build文件中example.xxxx.so文件移至主目录

就可以执行test.py
得到结果:7,12

猜你喜欢

转载自blog.csdn.net/weixin_44312422/article/details/129997833