using namespace boost::python;
struct World{
void set(std::string msg) { this->msg = msg; }
std::string greet() { return msg; }
std::string msg;
};
BOOST_PYTHON_MODULE(hello)
{
class_<World>("World")
.def("greet", &World::greet)
.def("set", &World::set)
;
}
Run Code Online (Sandbox Code Playgroud)
编译并构建好
~/boost$ g++ -fPIC -I/usr/include/python2.6 -c hello.cpp
~/boost$ g++ -shared hello.o -o hello.so
Run Code Online (Sandbox Code Playgroud)
但是当从python端导入时,出错了.
>>> import hello.so
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: ./hello.so: undefined symbol: _ZNK5boost6python7objects21py_function_impl_base9max_arityEv
>>>
Run Code Online (Sandbox Code Playgroud)
有谁能够帮我?提前致谢.
tr9*_*9sh 14
通过Boost Python通过"没有这样的文件或目录"错误解决了这个问题
g++ -c -fPIC hello.cpp -o hello.o
g++ -shared -Wl,-soname,hello.so -o hello.so hello.o -lpython2.6 -lboost_python
Run Code Online (Sandbox Code Playgroud)
为我做了诀窍.我希望这一点尽可能清楚,因为我现在正在努力解决这个问题半小时;)
与此处的其他帖子相同
g++ -c -fPIC hello.cpp -o hello.o
g++ -shared -Wl,-soname,hello.so -o hello.so hello.o -lpython2.6 -lboost_python
Run Code Online (Sandbox Code Playgroud)
但我想强调“-lpython2.6 -lboost_python”位置的重要性。如果你把它们放在输入文件 (hello.o) 的前面,它们会以某种方式被忽略(不链接到最终的 hello.so)。至少对于 g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 来说是这样。
简单来说,http : //ubuntuforums.org/showthread.php?t=496287建议:
g++ <.cpp or .o file(s)> [LDFLAGS] [LIBS] -o [appname]
Run Code Online (Sandbox Code Playgroud)
哦,我刚刚看到这个帖子:
并解决了问题