我正在查看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)