错误日志:cmake error while loading shared libraries No such file or directory | ldd =>not found
Reference:
1. 背景
在编译 ROS2 可执行的时候出现了一个错误:
-
有一个 C++ 工程,直接使用 CMakeLists.txt 编译出来好好的,可以直接执行; 在使用
colcon build
编译后的,出现了以下提示:error while loading shared libraries: libonnxruntime.so.1.10.0: cannot open shared object file: No such file or directory
这就很神奇了,使用
ldd
指令,发现确实动态库没链接上。- 使用
CMakeLists.txt
编译出来的:
- 使用
colcon
编译出来的:
可以看到
libonnxruntime.so.1.10.0
确实没有链接上。 - 使用
2. 解决
这里是因为RPATH
导致的,详细原因请参考第二个参考文献。
使用 readelf -d
可以看出两者区别:
-
使用
CMakeLists.txt
编译出来的:
-
使用
colcon
编译出来的:
在第一项中多一个RUNPATH
。
可以在 CMakeLists.txt
中针对某个 target 设置 RPATH
:
## Targets can have properties that affect how they are built.
## set_target_properties(target1 target2 ... PROPERTIES prop1 value1 prop2 value2 ...)
set_target_properties(lane_detect PROPERTIES INSTALL_RPATH "${onnxruntime_INSTALL_PREFIX}/lib")