gpt4 book ai didi

boost-python - boost_python 导入错误 : module does not define init function

转载 作者:行者123 更新时间:2023-12-03 13:04:05 25 4
gpt4 key购买 nike

首先:我查看了相关的问题,但不幸的是它们不是很有帮助。我正在尝试从外部库中包装一个枚举和一个类。

#include <Python.h>
#include <boost/python.hpp>
using namespace boost::python;

#include <libvpsc/rectangle.h>
using vpsc::Rectangle;
using vpsc::Dim;

BOOST_PYTHON_MODULE(adaptagrams)
{
enum_<Dim>("dim")
.value("x", vpsc::XDIM)
.value("y", vpsc::YDIM)
.value("unset", vpsc::UNSET)
;

class_<Rectangle>("Rectangle",
init<double, double, double, double, optional<bool> >())

.add_property("centerX", &Rectangle::getCentreX)
.add_property("centerY", &Rectangle::getCentreY)
.add_property("width", &Rectangle::width, &Rectangle::set_width)
.add_property("height", &Rectangle::height, &Rectangle::set_height)
;
}

并编译:
g++ -fPIC -I/usr/include/python2.7 -c adaptagrams.cpp -o adaptagrams.o
g++ -shared -Wl,-soname,adaptagrams.so -o adaptagrams.so adaptagrams.o -lpython2.7 -lboost_python -lvpsc

但是,当我尝试导入 .so 模块时,出现错误:
ImportError: dynamic module does not define init function (PyInit_adaptagrams)

有任何想法吗?

更新:当我重新启动 Python 并尝试导入时,我得到的第一个错误是:
ImportError: ./adaptagrams.so: undefined symbol: _ZN8topology13computeStressERKSt6vectorIPNS_4EdgeESaIS2_EE

当我再次尝试时,第二个是从上面的动态导入(2.7)和一个段错误(3.2)。 Boost 是针对 2.7 和 3.2 编译的,我在每种方法上都链接了正确的。

更新 2: boost_python 页面中的教程代码有效:
#include <Python.h>
#include <boost/python.hpp>
using namespace boost::python;

struct Hello
{
Hello(std::string msg): msg(msg) {}
void set(std::string msg) { this->msg = msg; }
std::string greet() { return msg; }
std::string msg;
};

BOOST_PYTHON_MODULE(constructor)
{
class_<Hello>("Hello", init<std::string>())
.def("greet", &Hello::greet)
.def("set", &Hello::set)
;
}

相同的编译:
g++ -fPIC -I/usr/include/python2.7 -c constructor.cpp -o constructor.o
g++ -shared -Wl,-soname,constructor.so -o constructor.so constructor.o -lpython2.7 -lboost_python

最佳答案

BOOST_PYTHON_MODULE 中使用的名称必须与 .so 的名称匹配您生成并导入到 的库 python .

关于boost-python - boost_python 导入错误 : module does not define init function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8400244/

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