'ROS2 rosbridge_suite dlopen cannot find lib path
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_suite
How I built ROS2 (Identical to my Current Environment) http://mamykin.com/posts/building-ros2-on-macos-big-sur-m1/
Solution 1:[1]
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
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 |
