因此,我搜索了一个很好的工具来将我的C++代码与python集成在一起,起初我查看了boost.python。

我已经从boost文档中获得了问候,并尝试构建和运行它。源代码是(src/hello.cpp):

#include <Python.h>
#include <boost/python.hpp>

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

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

问题1-Windows和mingw

我试图建立和我的结果:
g++ -o build\hello.o -c -IE:\Programming\libs\boost_1_48_0 -IE:\Programming\Python\include src\hello.cpp
g++ -shared -o pyhello.dll build\hello.o -LE:\Programming\libs\boost_1_48_0\stage\lib -LE:\Programming\Python\libs -lboost_python-mgw45-mt-1_48 -lpython27 -Wl,--out-implib,libpyhello.a
Creating library file: libpyhello.a
build\hello.o:hello.cpp:(.text+0x20): undefined reference to `_imp___ZN5boost6python6detail11init_moduleEPKcPFvvE'

还有与boost::python类似的4个未定义错误。

我的构建Boost命令行:bjam toolset=gcc variant=release
我在Google中(以及在stackoverflow上)发现了类似的问题,但在我的案子中没有找到答案。

问题2-使用模块(linux)

在linux平台上,构建模块没有问题,相同的源代码编译良好:
g++ -o build/hello.os -c -fPIC -I/usr/include/python2.7 src/hello.cpp
g++ -o libpyhello.so -shared build/hello.os -lboost_python -lpython2.7

现在,我该如何使用呢?在文档中没有关于模块命名的文字,请引用:



所以,我的模块名为:libpyhello.so,但是我如何在python iterpreter中使用它呢?我尝试导入pyhello,hello_ext,libpyhello-仅打印libpyhello解释器:
ImportError: dynamic module does not define init function (initlibpyhello)

导入的所有其他变体均失败:ImportError: No module named pyhello
更新第二个问题:已解决,*。so模块必须命名为BOOST_PYTHON_MODULE中使用的ID。在我将BOOST_PYTHON_MODULE(hello_ext)更改为BOOST_PYTHON_MODULE(libpyhello)之后,模块也将作为libpyhello导入。

最佳答案

库文件的命名就像在此处声明模块一样重要,这一点很重要:

BOOST_PYTHON_MODULE(hello_ext)

hello_ext.dllhello_ext.so

关于C++ Boost.Python : 2 problems,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9140572/

10-13 08:22