紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
小鱼 ROS 2 新书上线!点击链接查看, 新书配套视频点击链接查看。
提问前必看的发帖注意事项—— 提问前必看!不符合要求的问题拒绝回答!!
社区使用指南—如何添加标签修改密码
小鱼 ROS 2 新书上线!点击链接查看, 新书配套视频点击链接查看。
提问前必看的发帖注意事项—— 提问前必看!不符合要求的问题拒绝回答!!
社区使用指南—如何添加标签修改密码
[方法分享]在ROS2-CMakeLists.txt中引入第三方库
-
首先要明白一点,那就是ROS2也只是一系列软件库,至于
ament_cmake
是基于cmake写了一系列函数工具。- 编译包类型选择-
ament_cmake
一般分为三个步骤
- 添加头文件
一般使用include_directories
指定目录即可,也可以使用find_package直接定位到库。
include_directories() find_package(zmq REQUIRED)
- 添加可执行文件
add_executable(${PROJECT_NAME} src/main.cc )
- 链接库
如果你的库里引用了RCLCPP之类的ROS2自带库,使用
ament_target_dependencies(${PROJECT_NAME} geometry_msgs rclcpp )
否则使用
target_link_libraries(${PROJECT_NAME} zmq)
原因在于ROS2的库都加了类似于命名空间的东西,使用
target_link_libraries
链接rclcpp的库要这样子写。# 该语句摘自动手学ROS2教程-第二章基础篇 target_link_libraries(first_node rclcpp::rclcpp)
如有不对或者在实验中出现问题,欢迎留言讨论。
- 编译包类型选择-
-
@小鱼 小鱼,我之前添加第三方库(.so类型),首先是使用
include_directories()
添加头文件,然后再添加库文件(LINK_DIRECTORIES()
),再通过target_link_libraries()
链接库文件(.so文件)。这样去添加一个第三方库,会出现error while loading shared libraries: libxxx.so: cannot open shared object file: No such file or directory
,为了正常运行,我直接把lib库放到/usr/lib目录下,程序就能正常运行。
有没有不用将.so文件放置到/usr/lib的方法?毕竟直接将库文件放到/usr/lib中,容易出现多版本相互影响。 -
@Lorry 这个就涉及到了库的版本目录管理了,我没研究过ROS2的目录结构,应该可以吧把库放到工程的某个目录下,接着用install指令将其复制到某个特定的目录,再进行连接应该就可,具体我还没试过,后面试一试再更新回复。
-
@小鱼 方法找到了:在cmake中将第三方库文件统一生成到
lib/project_name
下,然后设置该目录为rpath,就能直接链接到库文件。 -
@Lorry 收到,感谢反馈
-
@Lorry 可以说的更详细一点吗
-
此回复已被删除!