Способ Boost.Python для обработки того, что вы запрашиваете, - это разделить ваш пакет на единицы компиляции , как объяснено в учебном пособии , а затем выполнить объединение в основном модуле компиляции, который фактически объявляет модули.
Вы не можете связать независимые модули в Boost.Python, потому что они объявляют определенные точки входа Python, которые выполняются Python при загрузке вашего модуля.Например, если имя модуля binary равно mod.so
, интерпретатор Python будет искать функцию с именем init_mod
(то есть то, что объявляет BOOST_PYTHON_MODULE(mod)
) и выполнит код этой функции.В коде этой функции он ожидает найти объявления объектов Python C-API (экземпляры, классы и т. Д.).
Если вы связываете, например, двоичный файл mod.so
с другим двоичным модулем (скажем, foo.so
), когда Python загружает mod.so
, он будет только находить и выполнять init_mod
и будет игнорировать init_foo
.