1

我已经从示例存储库下载了一个 ROS2 演示。

具体来说,我使用了minimum_subscriberminimum_publisher

我安装了 ROS2 /opt/ros2,当我使用 构建这两个示例时colcon build,它会生成一个install/带有 的目录lib/shared/以及其他常见的目录结构。

我可以在我的机器上使用我当前的设置完美地执行和运行这些演示,但是这些可执行文件链接到存在的库/opt/ros2,所以当我想在另一台没有安装 ROS2 的机器上执行它们或者我将我的 ROS2 安装移动到我的机器中时,可执行文件找不到共享对象。

我添加了一个非常简单的脚本,该脚本install/lib在构建时添加了所有依赖项,但可执行文件似乎并不关心,他们并没有在生成的lib目录中寻找共享库,他们一直试图在/opt/ros2.

我相信这是我应该在 CMake 中解决的问题,它不是 ROS2 特定的,所以,有什么办法可以告诉我生成的可执行文件在不同的目录中搜索?(../lib或者./lib在我的情况下)

4

1 回答 1

2

如果您自己构建它们(假设您提到了 CMake),您可以在 CMake 中设置 RPATH(此处的文档)。具体设置CMAKE_INSTALL_RPATH如下:

set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")

如果您无法重建它们,您可以LD_LIBRARY_PATH在您的环境中设置库所在的位置,或者您可以使用patchelf使用更新的 RPATH 修补可执行文件本身。

为了获得相对 RPATH 而不是绝对 RPATH,$ORIGIN请在 rpath 规范中使用该变量。有关详细信息,请参阅上面链接中的“建议”。

于 2020-01-17T14:21:31.197 回答