几天来,我一直在image_proc
为 ROS2 的运行而苦苦挣扎。它链接到vision_opencv
which 又链接到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
这_PyBaseObject_Type
在 libboost_python37 中确实是未定义的。
我们来看看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 也没有它。)
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。