我已经挣扎了好几天,想让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
工具进行的进一步调查得出:
这个_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
是否应该链接到{我在网上的其他地方看到过一个老问题,有人把他们的输出从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
命令是最新的python3.7.3,它的“默认值”如python --version
给出了3.7.3。在
第一个问题:
似乎这是不必要的,如这里https://www.mail-archive.com/distutils-sig@python.org/msg23796.html和这里https://github.com/Cantera/cantera/issues/319。在
有些库是链接的,有些库没有链接。在
我找到了一个我根本不喜欢的解决办法,因为我仍然不知道根本原因是什么。在
将Python3库添加到
DYLD_INSERT_LIBRARIES
env变量可以使其工作:警告:这使Virtualenv/pipenv停止工作。在
这证实了它丢失了,当从Brew安装时,Mojave无法获取它。希望其他人确认这是Brew/Mojave/Boost或image\u proc ROS2的问题CMakeLists.txt文件. 在
这个答案值得称赞:https://stackoverflow.com/a/1990844/1829511
相关问题 更多 >
编程相关推荐