是否从CMake的lib目录中加载共享库?

问题描述 投票:0回答:1

我已经从examples repository下载了ROS2演示。

特别是,我使用了minimal_subscriberminimal_publisher

[我在/opt/ros2中安装了ROS2,当我用colcon build构建这两个示例时,它会生成一个包含install/lib/和其他常用目录结构的shared/目录。

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

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

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

c++ cmake shared-libraries ros2
1个回答
0
投票

如果您自己构建它们(假设您提到CMake,则可以在CMake(docs here)中设置RPATH。具体设置CMAKE_INSTALL_RPATH类似:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.