Steps to reproduce issue
ament test --only-packages skynet
Expected behavior
test runs normally
Actual behavior
Failed with output:
+++ Testing 'skynet'
==> '. /Users/mc/skynet-edge/core_ws/build/skynet/cmake__test.sh && /usr/bin/make test ARGS=-V -D ExperimentalTest --no-compress-output' in '/Users/mc/skynet-edge/core_ws/build/skynet'
Running tests...
UpdateCTestConfiguration from :/Users/mc/skynet-edge/core_ws/build/skynet/DartConfiguration.tcl
Parse Config file:/Users/mc/skynet-edge/core_ws/build/skynet/DartConfiguration.tcl
Site: mcs-MacBook-Pro.sjc.cyngn.internal
Build name: Darwin-c++
Add coverage exclude regular expressions.
SetCTestConfiguration:CMakeCommand:/Applications/CMake.app/Contents/bin/cmake
UpdateCTestConfiguration from :/Users/mc/skynet-edge/core_ws/build/skynet/DartConfiguration.tcl
Parse Config file:/Users/mc/skynet-edge/core_ws/build/skynet/DartConfiguration.tcl
Test project /Users/mc/skynet-edge/core_ws/build/skynet
Constructing a list of tests
Done constructing a list of tests
Updating test list for fixtures
Added 0 tests to meet fixture requirements
Checking test dependency graph...
Checking test dependency graph end
test 1
Start 1: skynet_test
1: Test command: /usr/local/bin/python3 "-u" "/Users/mc/ros2-osx/share/ament_cmake_test/cmake/run_test.py" "/Users/mc/skynet-edge/core_ws/build/skynet/test_results/skynet/skynet_test.gtest.xml" "--output-file" "/Users/mc/skynet-edge/core_ws/build/skynet/ament_cmake_gmock/skynet_test.txt" "--command" "/Users/mc/skynet-edge/core_ws/build/skynet/test/skynet_test" "--gtest_output=xml:/Users/mc/skynet-edge/core_ws/build/skynet/test_results/skynet/skynet_test.gtest.xml"
1: Test timeout computed to be: 60
1: -- run_test.py: invoking following command in '/Users/mc/skynet-edge/core_ws/src/skynet':
1: - /Users/mc/skynet-edge/core_ws/build/skynet/test/skynet_test --gtest_output=xml:/Users/mc/skynet-edge/core_ws/build/skynet/test_results/skynet/skynet_test.gtest.xml
1: dyld: Library not loaded: libfastcdr.dylib
1: Referenced from: /Users/mc/ros2-osx/lib/librmw_fastrtps_cpp.dylib
1: Reason: image not found
1: -- run_test.py: return code -6
1: -- run_test.py: generate result file '/Users/mc/skynet-edge/core_ws/build/skynet/test_results/skynet/skynet_test.gtest.xml' with failed test
1: -- run_test.py: verify result file '/Users/mc/skynet-edge/core_ws/build/skynet/test_results/skynet/skynet_test.gtest.xml'
1/1 Test #1: skynet_test ......................***Failed 0.14 sec
0% tests passed, 1 tests failed out of 1
Label Time Summary:
gmock = 0.14 sec (1 test)
Total Test time (real) = 0.14 sec
The following tests FAILED:
1 - skynet_test (Failed)
Errors while running CTest
make: *** [test] Error 8
<== Command '. /Users/mc/skynet-edge/core_ws/build/skynet/cmake__test.sh && /usr/bin/make test 'ARGS=-V -D ExperimentalTest --no-compress-output'' failed in '/Users/mc/skynet-edge/core_ws/build/skynet' with exit code '2'
Additional information
My project compiles fine. I created a ROS2 test for my project and want to run it. The same test works fine on Ubuntu. I only have this problem on OSX.
As message says, the system can’t find libfastcdr.dylib. That is weird, because I can see the library in ~/ros2-osx/lib dir. I assume it should be visible after I sourced ROS2. I tried source scripts setup.bash, setup.sh, local_setup.bash, local_setup.sh. Nothing helped.
If I manually create symbol link in /usr/local/lib pointing to ~/ros2-osx/lib/libfastcdr.dylib, everything works fine. It doesn’t feels the right fix though.
That could be an issue with how Fast-RTPS is being linked. It sounds like it isn’t using RPATH and it should be.
Even without RPATH it should work if ~/ros2-osx/lib is in your DYLD_LIBRARY_PATH environment variable after you source ~/ros2-osx/setup.bash (this is the right one to source in most cases). If it is in the variable, then you may have SIP enabled which is a security feature in macOS that prevents propagation of the DYLD_LIBRARY_PATH to “system” binaries, like bash and make, which reside in /usr/bin and similar PATH folders.
If it is SIP then you can disable it (not recommended for security, but will work around the issue):
I might be reading the log incorrectly, but near the top it says “beta 1.” Lots has changed since then (6 months ago) in both ROS 2 and Fast-RTPS; you might want to try Beta 2 and see if the issue goes away.
@wjwwood
Not sure what is RPATH. Is it env. variable? I can’t see this variable set after I sourced ~/ros2-osx/setup.bash.
I tried to set DYLD_LIBRARY_PATH manually but, as you said, it isn’t helping due to SIP.
@codebot
Tried it with ROS2 beta2. Message is changed a bit but problem remains the same.
Running tests...
UpdateCTestConfiguration from :/Users/mc/skynet-edge/core_ws/build/skynet/DartConfiguration.tcl
Parse Config file:/Users/mc/skynet-edge/core_ws/build/skynet/DartConfiguration.tcl
Site: mcs-MacBook-Pro.sjc.cyngn.internal
Build name: Darwin-c++
Add coverage exclude regular expressions.
SetCTestConfiguration:CMakeCommand:/Applications/CMake.app/Contents/bin/cmake
Create new tag: 20170712-1754 - Experimental
UpdateCTestConfiguration from :/Users/mc/skynet-edge/core_ws/build/skynet/DartConfiguration.tcl
Parse Config file:/Users/mc/skynet-edge/core_ws/build/skynet/DartConfiguration.tcl
Test project /Users/mc/skynet-edge/core_ws/build/skynet
Constructing a list of tests
Done constructing a list of tests
Updating test list for fixtures
Added 0 tests to meet fixture requirements
Checking test dependency graph...
Checking test dependency graph end
test 1
Start 1: skynet_test
1: Test command: /usr/local/bin/python3 "-u" "/Users/mc/ros2-osx-b2/share/ament_cmake_test/cmake/run_test.py" "/Users/mc/skynet-edge/core_ws/build/skynet/test_results/skynet/skynet_test.gtest.xml" "--output-file" "/Users/mc/skynet-edge/core_ws/build/skynet/ament_cmake_gmock/skynet_test.txt" "--command" "/Users/mc/skynet-edge/core_ws/build/skynet/test/skynet_test" "--gtest_output=xml:/Users/mc/skynet-edge/core_ws/build/skynet/test_results/skynet/skynet_test.gtest.xml"
1: Test timeout computed to be: 60
1: -- run_test.py: invoking following command in '/Users/mc/skynet-edge/core_ws/src/skynet':
1: - /Users/mc/skynet-edge/core_ws/build/skynet/test/skynet_test --gtest_output=xml:/Users/mc/skynet-edge/core_ws/build/skynet/test_results/skynet/skynet_test.gtest.xml
1: dyld: Library not loaded: libfastrtps.1.dylib
1: Referenced from: /Users/mc/skynet-edge/core_ws/build/skynet/test/skynet_test
1: Reason: image not found
1: -- run_test.py: return code -6
1: -- run_test.py: generate result file '/Users/mc/skynet-edge/core_ws/build/skynet/test_results/skynet/skynet_test.gtest.xml' with failed test
1: -- run_test.py: verify result file '/Users/mc/skynet-edge/core_ws/build/skynet/test_results/skynet/skynet_test.gtest.xml'
1/1 Test #1: skynet_test ......................***Failed 0.17 sec
0% tests passed, 1 tests failed out of 1
Label Time Summary:
gmock = 0.17 sec (1 test)
Total Test time (real) = 0.18 sec
The following tests FAILED:
1 - skynet_test (Failed)
Errors while running CTest
make: *** [test] Error 8
<== Command '. /Users/mc/skynet-edge/core_ws/build/skynet/cmake__test.sh && /usr/bin/make test 'ARGS=-V -D ExperimentalTest --no-compress-output'' failed in '/Users/mc/skynet-edge/core_ws/build/skynet' with exit code '2'
'test_pkg' for package '/Users/mc/skynet-edge/core_ws/src/skynet' failed: <== Command '. /Users/mc/skynet-edge/core_ws/build/skynet/cmake__test.sh && /usr/bin/make test 'ARGS=-V -D ExperimentalTest --no-compress-output'' failed in '/Users/mc/skynet-edge/core_ws/build/skynet' with exit code '2'
<== Command '. /Users/mc/skynet-edge/core_ws/build/skynet/cmake__test.sh && /usr/bin/make test 'ARGS=-V -D ExperimentalTest --no-compress-output'' failed in '/Users/mc/skynet-edge/core_ws/build/skynet' with exit code '2'
You could try using install_name_tool to change the libfastrtps.1.dylib reference in your /Users/mc/skynet-edge/core_ws/build/skynet/test/skynet_test executable to be /Users/mc/ros2-osx/lib/libfastrtps.1.dylib, or what ever the actual path is.
I’m glad you got it working, but it shouldn’t be necessary I think. It’s probably either a bug in the CMake module for Fast-RTPS or in how we pass along, or link to, those libraries in rmw_fastrtps_cpp.