Python调用C++之PYBIND11简介
简介 PyBind11是能够让C++和Python代码之间相互调用的轻量级头文件库。在这之前已经有了一个类似功能的库:Boost.Python。既然已经有了一个类似库,而且PyBind11的目的和语法都与Boost.Python相似,为什么还要重复造轮子?原因主要有以下亮点: Boost.Python为了兼容大多数C++标准和编译器,它使用了很多可以说是魔法的操作去解决问题而变得非常的臃肿; 目前很多编译器对C++11已经有很好的支持,而且C++11应用也比较广泛。 因此,PyBind11应运而生,他能在抛弃Boost.Python的负担同时又具备Boost.Python的简单操作。 使用 PyBind11的主要目的是将已有的C++代码接口暴露给Python去调用。例如, ONNX Runtime --一个用于ONNX格式的神经网络模型推理的引擎,其推理的核心模块是用C++写的,但是从易用性、Python AI 方面的主导地位等方面考虑,它需要将模型推理的接口暴露给Python。在之前的文章 ONNX Runtime 源码阅读:模型推理过程概览 中也有提到过。其接口暴露代码在$ONNX_RUNTIME/onnxruntime/python/onnxruntime_pybind_state.cc中。 将C++暴露给Python主要有两个大方向: 将函数暴露给Python;