Python связывание функций в программе на C++

У меня есть программа, написанная на C++, которая работает сама по себе, однако мы хотим сделать ее доступной для Python. В частности, у нас есть несколько функций, которые более эффективны в C++, но мы делаем много других вещей с выводом, используя скрипты Python. Я не хочу переписывать весь main() в Python, так как мы используем алгоритмы поиска корня Boost и другие функциональные возможности, которые было бы непросто сделать в Python.

Можно ли добавить привязку Python к этим функциям, сохраняя main() с ++? Я никогда не делал связывание Python раньше, но я посмотрел на Boost.python, так как мы уже используем Boost. Большинство примеров используют функции / классы C++ в файле hpp и встраивают их в программу на python, что не совсем то, что мы хотим.

Мы хотим, чтобы наша программа на С ++ была автономной, чтобы она могла работать так, как она есть, если пользователи хотят, а также позволяла пользователям вызывать эти функции из программы на Python. Было бы здорово использовать один и тот же Makefile и exe. Мы не хотим создавать отдельную библиотеку C++, содержащую связанные функции; мы не заинтересованы в создании питонной версии кода, просто предоставляя доступ к этим полезным функциям.

Спасибо

1 ответ

Решение

У нас есть обширная библиотека C++, которую мы сделали доступной для python, используя класс-оболочку python, который вызывает интерфейс, который мы определили в boost python.

Один класс Python обрабатывает все запросы в Python, вызывая модуль расширения Python, написанный на C++ с Boost Python. Расширение Python выполняет код C++, поэтому он может ссылаться и использовать что угодно из исходной библиотеки.

Вы сказали, что ваш C++ - исполняемый файл. Почему вы не можете использовать системные вызовы для запуска процесса оболочки? Вы можете сделать это на любом языке, включая Python. Я думал, что вы хотите получить доступ к отдельным функциям, а это значит, что вам нужны все ваши функции в статической библиотеке.

Вы обычно строите свой C++ exe, связывая общий код. Вы делаете "модуль расширения python boost", который связывает общий код и может быть импортирован скриптом python. И, конечно, исполняемый модуль, который связывает и тестирует общий код. Я предпочитаю, чтобы общий код представлял собой автономную статическую библиотеку (используйте -fPic, если есть сборка posix gcc).

Другие вопросы по тегам