ROS2 rosbridge_suite dlopen找不到lib路径
我最近为我的 Apple Silicon Mac 构建了 ROS2 gactic,并且我想为此 ROS 使用 rosbridge_suite。
因此,我在 src 文件夹下添加了 rosbridge_suite 存储库并再次进行构建。
当我使用下面的命令启动 rosbridge 时,
ros2 launch rosbridge_server rosbridge_websocket_launch.xml
我遇到了这些错误
[rosapi_node-2] Traceback (most recent call last):
[rosapi_node-2] File "/Users/parkjb/ros2/ros2_galactic/install/lib/python3.9/site-packages/rclpy/context.py", line 69, in init
[rosapi_node-2] if self.__context is not None:
[rosapi_node-2] AttributeError: 'Context' object has no attribute '_Context__context'
[rosapi_node-2]
[rosapi_node-2] During handling of the above exception, another exception occurred:
[rosapi_node-2]
[rosapi_node-2] Traceback (most recent call last):
[rosapi_node-2] File "/Users/parkjb/ros2/ros2_galactic/install/lib/rosapi/rosapi_node", line 330, in <module>
[rosapi_node-2] main()
[rosapi_node-2] File "/Users/parkjb/ros2/ros2_galactic/install/lib/rosapi/rosapi_node", line 318, in main
[rosapi_node-2] rclpy.init(args=args)
[rosapi_node-2] File "/Users/parkjb/ros2/ros2_galactic/install/lib/python3.9/site-packages/rclpy/__init__.py", line 76, in init
[rosapi_node-2] return context.init(args, domain_id=domain_id)
[rosapi_node-2] File "/Users/parkjb/ros2/ros2_galactic/install/lib/python3.9/site-packages/rclpy/context.py", line 72, in init
[rosapi_node-2] self.__context = _rclpy.Context(
[rosapi_node-2] rclpy._rclpy_pybind11.RCLError: Failed to initialize init options: failed to load shared library 'librmw_cyclonedds_cpp.dylib' due to dlopen error: dlopen(librmw_cyclonedds_cpp.dylib, 0x0001): tried: '/opt/homebrew/lib/librmw_cyclonedds_cpp.dylib' (no such file), 'librmw_cyclonedds_cpp.dylib' (no such file), '/usr/local/lib/librmw_cyclonedds_cpp.dylib' (no such file), '/usr/lib/librmw_cyclonedds_cpp.dylib' (no such file), '/Users/parkjb/ros2/ros2_galactic/librmw_cyclonedds_cpp.dylib' (no such file), at /Users/parkjb/ros2/ros2_galactic/src/ros2/rcutils/src/shared_library.c:99, at /Users/parkjb/ros2/ros2_galactic/src/ros2/rmw_implementation/rmw_implementation/src/functions.cpp:77, at /Users/parkjb/ros2/ros2_galactic/src/ros2/rcl/rcl/src/rcl/init_options.c:75
[ERROR] [rosapi_node-2]: process has died [pid 26947, exit code 1, cmd '/Users/parkjb/ros2/ros2_galactic/install/lib/rosapi/rosapi_node --ros-args -r __node:=rosapi --params-file /var/folders/n_/sqhbl57x7_b0h_v4ql6ht5m00000gn/T/launch_params_vss_roak --params-file /var/folders/n_/sqhbl57x7_b0h_v4ql6ht5m00000gn/T/launch_params_7bjyom3b --params-file /var/folders/n_/sqhbl57x7_b0h_v4ql6ht5m00000gn/T/launch_params_2_8xl_3l'].
,
[rosbridge_websocket-1] Traceback (most recent call last):
[rosbridge_websocket-1] File "/Users/parkjb/ros2/ros2_galactic/install/lib/python3.9/site-packages/rclpy/context.py", line 69, in init
[rosbridge_websocket-1] if self.__context is not None:
[rosbridge_websocket-1] AttributeError: 'Context' object has no attribute '_Context__context'
[rosbridge_websocket-1]
[rosbridge_websocket-1] During handling of the above exception, another exception occurred:
[rosbridge_websocket-1]
[rosbridge_websocket-1] Traceback (most recent call last):
[rosbridge_websocket-1] File "/Users/parkjb/ros2/ros2_galactic/install/lib/rosbridge_server/rosbridge_websocket", line 332, in <module>
[rosbridge_websocket-1] main()
[rosbridge_websocket-1] File "/Users/parkjb/ros2/ros2_galactic/install/lib/rosbridge_server/rosbridge_websocket", line 316, in main
[rosbridge_websocket-1] rclpy.init(args=args)
[rosbridge_websocket-1] File "/Users/parkjb/ros2/ros2_galactic/install/lib/python3.9/site-packages/rclpy/__init__.py", line 76, in init
[rosbridge_websocket-1] return context.init(args, domain_id=domain_id)
[rosbridge_websocket-1] File "/Users/parkjb/ros2/ros2_galactic/install/lib/python3.9/site-packages/rclpy/context.py", line 72, in init
[rosbridge_websocket-1] self.__context = _rclpy.Context(
[rosbridge_websocket-1] rclpy._rclpy_pybind11.RCLError: Failed to initialize init options: failed to load shared library 'librmw_cyclonedds_cpp.dylib' due to dlopen error: dlopen(librmw_cyclonedds_cpp.dylib, 0x0001): tried: '/opt/homebrew/lib/librmw_cyclonedds_cpp.dylib' (no such file), 'librmw_cyclonedds_cpp.dylib' (no such file), '/usr/local/lib/librmw_cyclonedds_cpp.dylib' (no such file), '/usr/lib/librmw_cyclonedds_cpp.dylib' (no such file), '/Users/parkjb/ros2/ros2_galactic/librmw_cyclonedds_cpp.dylib' (no such file), at /Users/parkjb/ros2/ros2_galactic/src/ros2/rcutils/src/shared_library.c:99, at /Users/parkjb/ros2/ros2_galactic/src/ros2/rmw_implementation/rmw_implementation/src/functions.cpp:77, at /Users/parkjb/ros2/ros2_galactic/src/ros2/rcl/rcl/src/rcl/init_options.c:75
[ERROR] [rosbridge_websocket-1]: process has died [pid 26946, exit code 1, cmd '/Users/parkjb/ros2/ros2_galactic/install/lib/rosbridge_server/rosbridge_websocket --ros-args -r __node:=rosbridge_websocket --params-file /var/folders/n_/sqhbl57x7_b0h_v4ql6ht5m00000gn/T/launch_params_0xmoxvgm --params-file /var/folders/n_/sqhbl57x7_b0h_v4ql6ht5m00000gn/T/launch_params_ot_3hvt9 --params-file /var/folders/n_/sqhbl57x7_b0h_v4ql6ht5m00000gn/T/launch_params_zd34jhl5 --params-file /var/folders/n_/sqhbl57x7_b0h_v4ql6ht5m00000gn/T/launch_params_den13fk1 --params-file /var/folders/n_/sqhbl57x7_b0h_v4ql6ht5m00000gn/T/launch_params_53o5ojte --params-file /var/folders/n_/sqhbl57x7_b0h_v4ql6ht5m00000gn/T/launch_params_umglw4w2 --params-file /var/folders/n_/sqhbl57x7_b0h_v4ql6ht5m00000gn/T/launch_params_868rt_1u --params-file /var/folders/n_/sqhbl57x7_b0h_v4ql6ht5m00000gn/T/launch_params_d70ymv3p --params-file /var/folders/n_/sqhbl57x7_b0h_v4ql6ht5m00000gn/T/launch_params_zr0nset_ --params-file /var/folders/n_/sqhbl57x7_b0h_v4ql6ht5m00000gn/T/launch_params_6axnx4vf --params-file /var/folders/n_/sqhbl57x7_b0h_v4ql6ht5m00000gn/T/launch_params_ln9ct7c_ --params-file /var/folders/n_/sqhbl57x7_b0h_v4ql6ht5m00000gn/T/launch_params_8yuje8ja'].
看起来 dlopen 找不到 lib 的路径,所以我检查了我的 $DYLD_LIBRARY_PATH
结果
/Users/parkjb/ros2/ros2_gactic/install/opt/yaml_cpp_vendor/lib:/Users/parkjb/ros2/ros2_gactic/install/opt/rviz_ogre_vendor/lib:/Users/parkjb/ros2/ros2_gactic/install/lib< /code>
我检查了 dlopen 正在查找的目标 dylib 所在位置/Users/parkjb/ros2/ros2_gactic/install/lib
但 dlopen 没有搜索路径。 (仅搜索 .
、/opt/homebrew/lib
、/usr/local/lib
、/usr/lib
code>, ~/ros2/ros2_gactic
根据错误消息)
如何让 dlopen 搜索所需的路径 ~/ros2/ros2_gactic/install/lib
ROSBridge_Suite Github 链接 https://github.com/RobotWebTools/rosbridge_suite
我如何构建 ROS2(与我的当前环境) http://mamykin.com/posts/building-ros2 -on-macos-big-sur-m1/
I've recently built ROS2 galactic for my apple silicon Mac and I want to use rosbridge_suite
for this ROS.
So I added the rosbridge_suite
repo under the src
folder and made a build again.
When I launched rosbridge using command below
ros2 launch rosbridge_server rosbridge_websocket_launch.xml
I encountered these ERRORs
[rosapi_node-2] Traceback (most recent call last):
[rosapi_node-2] File "/Users/parkjb/ros2/ros2_galactic/install/lib/python3.9/site-packages/rclpy/context.py", line 69, in init
[rosapi_node-2] if self.__context is not None:
[rosapi_node-2] AttributeError: 'Context' object has no attribute '_Context__context'
[rosapi_node-2]
[rosapi_node-2] During handling of the above exception, another exception occurred:
[rosapi_node-2]
[rosapi_node-2] Traceback (most recent call last):
[rosapi_node-2] File "/Users/parkjb/ros2/ros2_galactic/install/lib/rosapi/rosapi_node", line 330, in <module>
[rosapi_node-2] main()
[rosapi_node-2] File "/Users/parkjb/ros2/ros2_galactic/install/lib/rosapi/rosapi_node", line 318, in main
[rosapi_node-2] rclpy.init(args=args)
[rosapi_node-2] File "/Users/parkjb/ros2/ros2_galactic/install/lib/python3.9/site-packages/rclpy/__init__.py", line 76, in init
[rosapi_node-2] return context.init(args, domain_id=domain_id)
[rosapi_node-2] File "/Users/parkjb/ros2/ros2_galactic/install/lib/python3.9/site-packages/rclpy/context.py", line 72, in init
[rosapi_node-2] self.__context = _rclpy.Context(
[rosapi_node-2] rclpy._rclpy_pybind11.RCLError: Failed to initialize init options: failed to load shared library 'librmw_cyclonedds_cpp.dylib' due to dlopen error: dlopen(librmw_cyclonedds_cpp.dylib, 0x0001): tried: '/opt/homebrew/lib/librmw_cyclonedds_cpp.dylib' (no such file), 'librmw_cyclonedds_cpp.dylib' (no such file), '/usr/local/lib/librmw_cyclonedds_cpp.dylib' (no such file), '/usr/lib/librmw_cyclonedds_cpp.dylib' (no such file), '/Users/parkjb/ros2/ros2_galactic/librmw_cyclonedds_cpp.dylib' (no such file), at /Users/parkjb/ros2/ros2_galactic/src/ros2/rcutils/src/shared_library.c:99, at /Users/parkjb/ros2/ros2_galactic/src/ros2/rmw_implementation/rmw_implementation/src/functions.cpp:77, at /Users/parkjb/ros2/ros2_galactic/src/ros2/rcl/rcl/src/rcl/init_options.c:75
[ERROR] [rosapi_node-2]: process has died [pid 26947, exit code 1, cmd '/Users/parkjb/ros2/ros2_galactic/install/lib/rosapi/rosapi_node --ros-args -r __node:=rosapi --params-file /var/folders/n_/sqhbl57x7_b0h_v4ql6ht5m00000gn/T/launch_params_vss_roak --params-file /var/folders/n_/sqhbl57x7_b0h_v4ql6ht5m00000gn/T/launch_params_7bjyom3b --params-file /var/folders/n_/sqhbl57x7_b0h_v4ql6ht5m00000gn/T/launch_params_2_8xl_3l'].
and
[rosbridge_websocket-1] Traceback (most recent call last):
[rosbridge_websocket-1] File "/Users/parkjb/ros2/ros2_galactic/install/lib/python3.9/site-packages/rclpy/context.py", line 69, in init
[rosbridge_websocket-1] if self.__context is not None:
[rosbridge_websocket-1] AttributeError: 'Context' object has no attribute '_Context__context'
[rosbridge_websocket-1]
[rosbridge_websocket-1] During handling of the above exception, another exception occurred:
[rosbridge_websocket-1]
[rosbridge_websocket-1] Traceback (most recent call last):
[rosbridge_websocket-1] File "/Users/parkjb/ros2/ros2_galactic/install/lib/rosbridge_server/rosbridge_websocket", line 332, in <module>
[rosbridge_websocket-1] main()
[rosbridge_websocket-1] File "/Users/parkjb/ros2/ros2_galactic/install/lib/rosbridge_server/rosbridge_websocket", line 316, in main
[rosbridge_websocket-1] rclpy.init(args=args)
[rosbridge_websocket-1] File "/Users/parkjb/ros2/ros2_galactic/install/lib/python3.9/site-packages/rclpy/__init__.py", line 76, in init
[rosbridge_websocket-1] return context.init(args, domain_id=domain_id)
[rosbridge_websocket-1] File "/Users/parkjb/ros2/ros2_galactic/install/lib/python3.9/site-packages/rclpy/context.py", line 72, in init
[rosbridge_websocket-1] self.__context = _rclpy.Context(
[rosbridge_websocket-1] rclpy._rclpy_pybind11.RCLError: Failed to initialize init options: failed to load shared library 'librmw_cyclonedds_cpp.dylib' due to dlopen error: dlopen(librmw_cyclonedds_cpp.dylib, 0x0001): tried: '/opt/homebrew/lib/librmw_cyclonedds_cpp.dylib' (no such file), 'librmw_cyclonedds_cpp.dylib' (no such file), '/usr/local/lib/librmw_cyclonedds_cpp.dylib' (no such file), '/usr/lib/librmw_cyclonedds_cpp.dylib' (no such file), '/Users/parkjb/ros2/ros2_galactic/librmw_cyclonedds_cpp.dylib' (no such file), at /Users/parkjb/ros2/ros2_galactic/src/ros2/rcutils/src/shared_library.c:99, at /Users/parkjb/ros2/ros2_galactic/src/ros2/rmw_implementation/rmw_implementation/src/functions.cpp:77, at /Users/parkjb/ros2/ros2_galactic/src/ros2/rcl/rcl/src/rcl/init_options.c:75
[ERROR] [rosbridge_websocket-1]: process has died [pid 26946, exit code 1, cmd '/Users/parkjb/ros2/ros2_galactic/install/lib/rosbridge_server/rosbridge_websocket --ros-args -r __node:=rosbridge_websocket --params-file /var/folders/n_/sqhbl57x7_b0h_v4ql6ht5m00000gn/T/launch_params_0xmoxvgm --params-file /var/folders/n_/sqhbl57x7_b0h_v4ql6ht5m00000gn/T/launch_params_ot_3hvt9 --params-file /var/folders/n_/sqhbl57x7_b0h_v4ql6ht5m00000gn/T/launch_params_zd34jhl5 --params-file /var/folders/n_/sqhbl57x7_b0h_v4ql6ht5m00000gn/T/launch_params_den13fk1 --params-file /var/folders/n_/sqhbl57x7_b0h_v4ql6ht5m00000gn/T/launch_params_53o5ojte --params-file /var/folders/n_/sqhbl57x7_b0h_v4ql6ht5m00000gn/T/launch_params_umglw4w2 --params-file /var/folders/n_/sqhbl57x7_b0h_v4ql6ht5m00000gn/T/launch_params_868rt_1u --params-file /var/folders/n_/sqhbl57x7_b0h_v4ql6ht5m00000gn/T/launch_params_d70ymv3p --params-file /var/folders/n_/sqhbl57x7_b0h_v4ql6ht5m00000gn/T/launch_params_zr0nset_ --params-file /var/folders/n_/sqhbl57x7_b0h_v4ql6ht5m00000gn/T/launch_params_6axnx4vf --params-file /var/folders/n_/sqhbl57x7_b0h_v4ql6ht5m00000gn/T/launch_params_ln9ct7c_ --params-file /var/folders/n_/sqhbl57x7_b0h_v4ql6ht5m00000gn/T/launch_params_8yuje8ja'].
Looks like dlopen cannot find the path to lib so I checked my $DYLD_LIBRARY_PATH
resulting
/Users/parkjb/ros2/ros2_galactic/install/opt/yaml_cpp_vendor/lib:/Users/parkjb/ros2/ros2_galactic/install/opt/rviz_ogre_vendor/lib:/Users/parkjb/ros2/ros2_galactic/install/lib
I checked the targeting dylib that dlopen is finding is under /Users/parkjb/ros2/ros2_galactic/install/lib
but dlopen is not searching for the path. (Only searching for .
, /opt/homebrew/lib
, /usr/local/lib
, /usr/lib
, ~/ros2/ros2_galactic
according to the ERROR message)
How can I make dlopen to search for the wanted path ~/ros2/ros2_galactic/install/lib
ROSBridge_Suite Github Link
https://github.com/RobotWebTools/rosbridge_suiteHow I built ROS2 (Identical to my Current Environment)
http://mamykin.com/posts/building-ros2-on-macos-big-sur-m1/
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
解决此错误的一种相当愚蠢的方法,仍然需要更清晰的方法来解决它。
我只是通过此命令将
~/ros2/ros2_gactic/install/lib
中的整个文件和文件夹软链接到~/ros2/ros2_gactic
哈哈:D
编辑 - 也许是一个问题 SIP csrutil 可能会有所帮助
在恢复模式下禁用
Quite a DUMB way to resolve this error, still wanting more clear way to resolve it.
I just soft linked the entire files and folders in
~/ros2/ros2_galactic/install/lib
to~/ros2/ros2_galactic
via this commandlol:D
Edit- Maybe a problem with SIP
csrutil disable on recovery mode might help