boost python hello程序上的导入错误 包括
但当从python端导入时,出现了错误boost python hello程序上的导入错误 包括,python,boost,Python,Boost,但当从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 >>>
>>> import hello.so
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: ./hello.so: undefined symbol: _ZNK5boost6python7objects21py_function_impl_base9max_arityEv
>>>
导入hello.so
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
导入错误:./hello.so:未定义符号:_ZNK5boost6python7objects21py_函数_impl_base9max_arityEv
>>>
哦,我刚看到这篇帖子: 问题解决了通过
他为我做了这件事。我希望这一点尽可能清楚,因为我已经为此挣扎了大约半个小时;) 和这里的其他帖子一样
g++ -c -fPIC hello.cpp -o hello.o
g++ -shared -Wl,-soname,hello.so -o hello.so hello.o -lpython2.6 -lboost_python
但我想强调“-lpython2.6-lboost_python”位置的重要性。如果您将它们放在输入文件(hello.o)前面,它们将以某种方式被忽略(不链接到最终的hello.so)。这至少适用于g++(Ubuntu/Linaro 4.6.3-1ubuntu5)
简单来说,我建议:
g++ <.cpp or .o file(s)> [LDFLAGS] [LIBS] -o [appname]
g++[LDFLAGS][LIBS]-o[appname]
我也遇到了同样的问题,结果是我的类中缺少了一个构造函数 那么,将“-lpython2.6-lboost_python”添加到链接行的解决方案是什么呢?我还不完全清楚你从另一个线程中学到了什么…@ChristopherBruns你有没有找到解决方案?据我所知,链接顺序敏感的原因是GNUld
编译时链接器是一个一次性链接器:它在命令行上从左到右拾取要解析的符号,并维护一个未解析符号列表,因此如果最后是hello.o
,它会引入新的未解析符号(在libpython2.6.so
和libboost\u python.so
中定义),但现在无法解析它们,因为右侧没有定义这些符号的内容。只是出现了相同的错误,这一个太狡猾了!!非常感谢你的评论,我可能花了好几天才注意到这一点
g++ -c -fPIC hello.cpp -o hello.o
g++ -shared -Wl,-soname,hello.so -o hello.so hello.o -lpython2.6 -lboost_python
g++ -c -fPIC hello.cpp -o hello.o
g++ -shared -Wl,-soname,hello.so -o hello.so hello.o -lpython2.6 -lboost_python
g++ <.cpp or .o file(s)> [LDFLAGS] [LIBS] -o [appname]