ROS2 rosbridge_suite dlopen找不到lib路径

发布于 2025-01-12 22:04:57 字数 7030 浏览 6 评论 0原文

我最近为我的 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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

只怪假的太真实 2025-01-19 22:04:57

解决此错误的一种相当愚蠢的方法,仍然需要更清晰的方法来解决它。

我只是通过此命令将 ~/ros2/ros2_gactic/install/lib 中的整个文件和文件夹软链接到 ~/ros2/ros2_gactic

cd ~/ros2/ros2_galactic
ln -s install/lib/* .

哈哈: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 command

cd ~/ros2/ros2_galactic
ln -s install/lib/* .

lol:D

Edit- Maybe a problem with SIP

csrutil disable on recovery mode might help

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文