libboost_python3缺少指向Python的动态链接?

2024-05-29 10:02:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经挣扎了好几天,想让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工具进行的进一步调查得出:

^{pr2}$

这个_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。在


Tags: 链接versionlibusrlocalcurrentpython3opt
1条回答
网友
1楼 · 发布于 2024-05-29 10:02:02

第一个问题:

Is python supposed to be linked to libboost_python37?

似乎这是不必要的,如这里https://www.mail-archive.com/distutils-sig@python.org/msg23796.html和这里https://github.com/Cantera/cantera/issues/319。在

有些库是链接的,有些库没有链接。在

Does anyone know what the problem is or how to solve this?

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

将Python3库添加到DYLD_INSERT_LIBRARIESenv变量可以使其工作:

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

警告:这使Virtualenv/pipenv停止工作。在

这证实了它丢失了,当从Brew安装时,Mojave无法获取它。希望其他人确认这是Brew/Mojave/Boost或image\u proc ROS2的问题CMakeLists.txt文件. 在

这个答案值得称赞:https://stackoverflow.com/a/1990844/1829511

相关问题 更多 >

    热门问题