Как сделать ссылку на существующий модуль Boost Python - PullRequest
5 голосов
/ 20 июня 2010

Я задавался вопросом об этом время от времени, но так и не получил однозначного ответа. Можно ли в рамках boost.python связать другой модуль boost.python.

Например, я экспортировал класс A в boost_python_module (libA) и функцию B (A a) в boost_python_module (libB). Можно ли указать в libB ссылку на A libA.

Другой способ взглянуть на эту проблему заключается в том, что сейчас мне нужно сгенерировать все мои привязки за один раз в одном модуле. Можно ли генерировать привязки постепенно в течение нескольких boost_python_module.

Ответы [ 2 ]

1 голос
/ 15 августа 2013

Способ 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.

0 голосов
/ 29 июня 2010

Я не знаю хорошо разделяемой библиотеки, но для меня работает импорт всех моих модулей, которые могут ссылаться друг на друга, в python: import libA; import libB.

Конечно, возможнопоместите эти импортные файлы в файл __init__.py, так что для того, чтобы добавить в python: import myLib.

...