libboost_python3缺少与Python的动态链接?

时间:2019-07-13 04:35:50

标签: python c++ boost cmake ros2

我一直在努力争取获得image_proc的ROS2。它链接到vision_opencv,后者又链接到libboost_python3

现在尝试运行此命令,我很熟悉:

dyld: Symbol not found: _PyBaseObject_Type
  Referenced from: /usr/local/opt/boost-python3/lib/libboost_python37.dylib
  Expected in: flat namespace
 in /usr/local/opt/boost-python3/lib/libboost_python37.dylib

使用nm工具进行的进一步调查得出:

nm -u /usr/local/opt/boost-python3/lib/libboost_python37.dylib | grep _PyBaseObject_Type

_PyBaseObject_Type

libboost_python37中确实没有定义_PyBaseObject_Type

让我们看看链接到libboost_python37的库是什么:

otool -L /usr/local/opt/boost-python3/lib/libboost_python37.dylib

usr/local/opt/boost-python3/lib/libboost_python37.dylib:
    /usr/local/opt/boost-python3/lib/libboost_python37.dylib (compatibility version 0.0.0, current version 0.0.0)
    /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 400.9.4)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.250.1)

它缺少指向Python的任何动态链接,这使我想到了第一个问题:

  • python是否应该链接到libboost_python37

我在网上的其他地方看到过一个古老的问题,有人在otool -L中发布了包含其输出的输出(尽管它是针对-mt文件的,但我的mt也没有)。 / p>

otool -L libboost_python-mt.dylib
libboost_python-mt.dylib:
    /opt/local/lib/libboost_python-mt.dylib (compatibility version 0.0.0, current version 0.0.0)
    /opt/local/Library/Frameworks/Python.framework/Versions/2.7/Python (compatibility version 2.7.0, current version 2.7.0)
    /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)

(它们的输出)

我的第二个问题:

  • 有人知道问题出在哪里或如何解决吗?

由于我使用的是ROS2构建工具colcon,而不仅仅是直接编译,因此事情变得更加复杂。

一些其他信息: 有人建议通过将libboost_python37.dylib链接到libboost_python3.dylib来解决此错误,因为无法拾取它。这不是问题,也无法解决。

我还安装了Brew的boost和boost-python3,并在两个地方自己编译。 Python命令是最新的python 3.7.3,它是“默认”,如python --version中给出的是3.7.3。

1 个答案:

答案 0 :(得分:0)

第一个问题:

  

python应该链接到libboost_python37吗?

似乎没有必要,如此处https://www.mail-archive.com/distutils-sig@python.org/msg23796.html和此处https://github.com/Cantera/cantera/issues/319所示。

有些库链接,有些则没有。

  

有人知道问题出在哪里或如何解决吗?

我找到了一个我根本不喜欢的解决方法,因为我仍然不知道根本原因是什么。

将Python3库添加到DYLD_INSERT_LIBRARIES env变量中使其起作用:

export DYLD_INSERT_LIBRARIES=/usr/local/opt/python/Frameworks/Python.framework/Versions/3.7/Python

哪个可以确认缺少它,并且从Brew进行安装时,Mojave无法将其捡起。希望别人确认这是Brew / Mojave / Boost或image_proc ROS2 CMakeLists.txt的问题。

信用证回答如下:https://stackoverflow.com/a/1990844/1829511