ros入门(5)—ros中的一些编译汇总

本文档详细介绍了在ROS环境中库的编译流程及调用方式,包括自定义库和第三方库的编译配置,并解释了如何依赖并使用其他包中的消息文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主要介绍ros中库的编译以及调用,第三方so库的调用,依赖其他package中messages/services/actions文件(需要msg.h等先生成)的问题。

编译库

库名称为autodrive_common,对应头文件在include目录下,需要在catkin_package中添加INCLUDE_DIRS和LIBRARIES,表示当前package(autodrive_common)对外提供的库以及头文件。

project(autodrive_common)
catkin_package(INCLUDE_DIRS include
               LIBRARIES autodrive_common)

添加库相关编译,库由string_tokenizer.cc生成。

add_library(autodrive_common src/string_tokenizer.cc)

如何调用libautodrive_common.so?
在package.xml中添加对autodrive_common package的build和run depend,

<build_depend>autodrive_common</build_depend>
<run_depend>autodrive_common</run_depend>

在需要调用库的package的CMakeLists.txt中在find_package中将autodrive_common作为catkin的components,然后就可以找到autodrive_common对外export的头文件${catkin_INCLUDE_DIRS}和库${catkin_LIBRARIES}

find_package( catkin REQUIRED COMPONENTS
              autodrive_common)
include_directories(
    include
    ${catkin_INCLUDE_DIRS}
)

target_link_libraries(planning_node ${catkin_LIBRARIES})

第三方库的调用

对某些不开源的第三方库的使用,例如libCanCmd.so,将其放到package下的lib目录下,头文件放置在include目录下,

#找到头文件目录
include_directories(
 include
)
#指定库所在的目录
link_directories(lib)
#应用程序prog链接CanCmd库
target_link_libraries(prog CanCmd )

依赖其他package生成的msg

对于将msg统一放在一个package中进行管理的情况,其他package在编译时需要先将该msg对应的package先编译生成对应的头文件。假如专门管理msg的package名为msgpackage。

#利用find_package将msgpackage设置为catkin的COMPONENTS,
find_package(catkin REQUIRED COMPONENTS msgpackage)

  add_executable(message_program src/main.cpp)
  #设置message_program的依赖为${catkin_EXPORTED_TARGETS}
  add_dependencies(message_program  ${catkin_EXPORTED_TARGETS})

那么${catkin_EXPORTED_TARGETS}是什么?在CMakeLists.txt中我们可以利用message()函数去debug,例如,

message("catkin_EXPORTED_TARGETS=${catkin_EXPORTED_TARGETS}")

这里写图片描述
都是些形如package_name_generage_messages_cpp的flag,所以对msg/service等的依赖,既可以使用package_name_generage_messages_cpp这种形式,也可以一劳永逸的通过find_packagecatkin_EXPORTED_TARGETS进行设置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值