Повысьте не подвергая модуль Python - PullRequest
0 голосов
/ 09 июня 2019

Я использую некоторый пример кода, который я нашел в сети, чтобы попытаться настроить libboost, чтобы я мог вызывать подпрограммы cpp с кодом Python.(Я собираюсь использовать python для написания своего пользовательского интерфейса и cpp для моего бэкэнда для этого приложения). Boost кажется достаточно простым в использовании, но в настоящее время он не предоставляет никаких функциональных возможностей.

#include <boost/python.hpp>

char const* greet()
{
    return "hello, world";
}

BOOST_PYTHON_MODULE(hello_ext)
{
    using namespace boost::python;
    def("greet", greet);
}

Я компилирую это, используя строку g ++-c hello.cpp -I / usr / include / python3.6 / (последнее включение необходимо, потому что я нахожусь на Ubuntu, где g ++ неправильно находит python, и мне лень добавлять его в мой путь)

import hello_ext
print(hello_ext.greet())

Я запускаю это, используя python3, и получаю следующий вывод

  File "hello.py", line 1, in <module>
    import hello_ext
ModuleNotFoundError: No module named 'hello_ext'

Это означает, что Boost неправильно отображает функциональность C ++, для которой я создал модуль.Что мне здесь не хватает?Я уже пытался выставить функциональность python в заголовочном файле, а не в файле cpp, и это дает тот же результат.

Кроме того, если у любого, кто просматривает этот пост, возникают проблемы с доступом к функциональности в их модуле, но кажется, что модуль выставляется, убедитесь, что в python еще нет модуля по умолчанию с тем же именем, которое будет иметь приоритет над вашим модулем.

1 Ответ

1 голос
/ 09 июня 2019

Согласно boost::python документам ваш код должен быть скомпилирован как разделяемая библиотека для использования в python:

g++ hello.cpp -I /usr/include/python3.6 -lboost_python-py36 -shared -fPIC -o hello_ext.so

Обратите внимание, что имя разделяемой библиотеки должно бытьтак же, как имя вашего модуля Python.Вы также забыли связать свой код с Boost Lib.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...