鱼香ROS社区
    • 版块
    • 最新
    • 未解决
    • 已解决
    • 群组
    • 注册
    • 登录
    紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
    提问前必看的发帖注意事项: 社区问答规则(小鱼个人)更新 | 高质量帖子发布指南

    [方法分享]在ROS2-CMakeLists.txt中引入第三方库

    已定时 已固定 已锁定 已移动
    ROS 2相关问题
    ros2 cmake 三方库
    4
    7
    2.2k
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 小鱼小
      小鱼 技术大佬
      最后由 编辑

      首先要明白一点,那就是ROS2也只是一系列软件库,至于ament_cmake是基于cmake写了一系列函数工具。

      • 编译包类型选择-ament_cmake

      一般分为三个步骤

      1. 添加头文件
        一般使用include_directories指定目录即可,也可以使用find_package直接定位到库。
      include_directories()
      find_package(zmq REQUIRED)
      
      1. 添加可执行文件
      add_executable(${PROJECT_NAME}
          src/main.cc
      )
      
      1. 链接库

      如果你的库里引用了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)
      

      如有不对或者在实验中出现问题,欢迎留言讨论。

      新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

      LorryL 1 条回复 最后回复 回复 引用 0
      • LorryL
        Lorry @小鱼
        最后由 编辑

        @小鱼 小鱼,我之前添加第三方库(.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中,容易出现多版本相互影响。

        小鱼小 1 条回复 最后回复 回复 引用 0
        • 小鱼小
          小鱼 技术大佬 @Lorry
          最后由 编辑

          @Lorry 这个就涉及到了库的版本目录管理了,我没研究过ROS2的目录结构,应该可以吧把库放到工程的某个目录下,接着用install指令将其复制到某个特定的目录,再进行连接应该就可,具体我还没试过,后面试一试再更新回复。

          新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

          LorryL 1 条回复 最后回复 回复 引用 0
          • LorryL
            Lorry @小鱼
            最后由 编辑

            @小鱼 方法找到了:在cmake中将第三方库文件统一生成到lib/project_name下,然后设置该目录为rpath,就能直接链接到库文件。

            小鱼小 31348475523 2 条回复 最后回复 回复 引用 0
            • 小鱼小
              小鱼 技术大佬 @Lorry
              最后由 编辑

              @Lorry 收到,感谢反馈

              新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

              16287993151 1 条回复 最后回复 回复 引用 0
              • 31348475523
                3134847552 @Lorry
                最后由 编辑

                @Lorry 可以说的更详细一点吗

                1 条回复 最后回复 回复 引用 0
                • 16287993151
                  早点睡晚安吧 @小鱼
                  最后由 编辑

                  此回复已被删除!
                  1 条回复 最后回复 回复 引用 0
                  • 第一个帖子
                    最后一个帖子
                  皖ICP备16016415号-7
                  Powered by NodeBB | 鱼香ROS