gpt4 book ai didi

C++ Boost.Python : 2 problems

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:28:43 26 4
gpt4 key购买 nike

所以,我搜索了将我的 C++ 代码与 python 集成的好工具,首先我查看了 boost.python。

我从 boost 文档中获取了 hello examle,并尝试构建并运行它。源代码是(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'

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

我的 build boost 命令行:bjam toolset=gcc variant=release

我在谷歌(以及在 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

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

can be exposed to Python by writing a Boost.Python wrapper:

#include <boost/python.hpp>

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

That's it. We're done. We can now build this as a shared library. The resulting DLL is now visible to Python. Here's a sample Python session:

>>> import hello_ext
>>> print hello_ext.greet()
hello, world

所以,我的模块名为: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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com