Разница между * .so файлом, созданным pybind и обычными динамическими библиотеками Linux - PullRequest
0 голосов
/ 12 февраля 2019

Когда для создания привязок python-c ++ используется pybind , при компиляции pybind создает файл *.so.AFAIK шаг компиляции в pybind просто использует компилятор c ++, так что это не должно отличаться от обычных разделяемых библиотек, которые можно создать для обычного кода на c ++.Как интерпретатор Python анализирует эти *.so файлы, чтобы заметить, что в них есть Python-совместимые модули?

1 Ответ

0 голосов
/ 08 марта 2019

В конечном счете, вы захотите взглянуть на документы CPython, чтобы узнать, как работают расширения C.Из документов: https://docs.python.org/3/extending/building.html

Расширение AC для CPython является общей библиотекой (например, .so файл в Linux, .pyd в Windows), которая экспортирует функцию инициализации.

Как сказано здесь, основное отличие состоит в том, что он определяет свою функцию точки инициализации / входа.

Все, что pybind делает, это оборачивает эту точку входа через PYBIND11_MODULE: https://pybind11.readthedocs.io/en/stable/basics.html#creating-bindings-for-a-simple-functionhttps://github.com/pybind/pybind11/blob/25abf7e/include/pybind11/detail/common.h#L283

...