[英]cmake link with libboost_python-py32.so instead of libboost_python.so
[英]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.