pybind 创建的 *.so 文件与常规 linux 动态库之间的区别

difference between *.so file created by pybind and regular linux dynamic libs

当使用 pybind 创建 python-c++ 绑定时,pybind 在编译时会创建一个 *.so 文件。 AFAIK pybind 中的编译步骤仅使用 c++ 编译器,因此这应该与为普通 c++ 代码创建的常规共享库没有什么不同。 python 解释器如何检查这些 *.so 文件以注意到其中有 python 兼容模块?

最后,您需要查看 CPython 文档以了解 C 扩展的工作原理。来自文档:https://docs.python.org/3/extending/building.html

A C extension for CPython is a shared library (e.g. a .so file on Linux, .pyd on Windows), which exports an initialization function.

正如这里所说,主要区别在于它定义了它的初始化/入口点函数。

所有 pybind 所做的就是通过 PYBIND11_MODULE 包装这个入口点: https://pybind11.readthedocs.io/en/stable/basics.html#creating-bindings-for-a-simple-function https://github.com/pybind/pybind11/blob/25abf7e/include/pybind11/detail/common.h#L283