提升模块不暴露给python

时间:2019-06-09 05:52:25

标签: python c++ boost

我使用一些我在网上找到的示例代码来尝试设置libboost,以便可以使用Python代码调用cpp例程。 (我打算使用python为该应用程序的后端编写我的UI和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 / (最后一个include是必需的,因为我在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 ++功能。我在这里想念什么?我已经尝试过在头文件而不是cpp文件中将功能公开给python,结果也一样。

此外,如果任何人在查看此帖子时在访问其模块中的功能时遇到问题,但似乎该模块已被暴露,请确保python尚无具有相同名称的默认模块(优先于该模块)您的模块。

1 个答案:

答案 0 :(得分:1)

根据boost::python docs,您的代码应编译为要在python中使用的共享库:

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

请注意,共享库的名称必须与python模块的名称相同。您还忘记了将代码与boost lib链接。