boost python hello程序上的导入错误 包括

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 >>>

但当从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
>>> 
导入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你有没有找到解决方案?据我所知,链接顺序敏感的原因是GNU
ld
编译时链接器是一个一次性链接器:它在命令行上从左到右拾取要解析的符号,并维护一个未解析符号列表,因此如果最后是
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]