簡體   English   中英

libboost_python3缺少與Python的動態鏈接?

[英]libboost_python3 missing dynamic link to Python?

我一直在掙扎了幾天得到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

_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中的“默認” python --version提供3.7.3。

第一個問題:

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

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

這確認它丟失了,並且從Brew安裝時Mojave無法將其撿起。 希望別人確認這是Brew / Mojave / Boost或image_proc ROS2 CMakeLists.txt的問題。

歸功於這個答案: https : //stackoverflow.com/a/1990844/1829511

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM