在Python中公开C ++类(只能加载ET_DYN和ET_EXEC)

时间:2016-07-08 06:38:56

标签: python boost

我正在查看here以了解如何向Python公开c ++。我已经构建了Python深度学习代码,它使用boost-python连接c ++和python,它运行正常,所以我的系统有boost-python alread设置的东西。 这是我的hello.cpp代码(我使用WorldC和WorldP清楚地显示了声明中的C ++和Python类名称用法。我不知道为什么原始网页使用相同的类名World来引起初学者的困惑。)

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

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

BOOST_PYTHON_MODULE(hello)
{
    class_<WorldC>("WorldP")
        .def("greet", &WorldC::greet)
        .def("set", &WorldC::set)
    ;
}

这就是我制作hello.so的方式

g++ -shared -c -o hello.so -fPIC hello.cpp -lboostpython -lpython2.7 -I/usr/local/include/python2.7

当我在python中运行import hello时,它给了我这个错误。

>>> import hello
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: ./hello.so: only ET_DYN and ET_EXEC can be loaded

有人可以告诉我什么是错的吗? (我在我的主目录下使用anaconda2用于python环境,但由于我的深度学习代码使用boost-python构建正常,所以在我的系统目录中应该没有问题包括boost / python.hpp)

0 个答案:

没有答案