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

    ros2 humble版本源码安装cartographer编译失败

    已定时 已固定 已锁定 已移动 未解决
    综合问题
    ros2 hamble cartographer建图
    3
    6
    563
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 2
      2537271032
      最后由 编辑

      背景:
      在Ubuntu 22.04版本的ros2 humble上学习一下cartographer,并实现在gazebo仿真里进行SLAM建图。
      问题描述:
      我将cartographer和cartographer_ros源码克隆到我的src目录下,进行一键配置rosdep后,并进行了依赖的安装。但是在编译时出现了错误如下:
      --- stderr: cartographer
      CMake Error:
      Error evaluating generator expression:

      $<LINK_LIBRARY:WHOLE_ARCHIVE,absl::log_flags>
      

      Expression did not evaluate to a known generator expression
      CMake Generate step failed. Build files cannot be regenerated correctly.
      Failed <<< cartographer [0.55s, exited with code 1]
      具体细节和上下文:
      我原本使用的Ubuntu 20.04的ros2 foxy版本,因为实际需要,我将我的Ubuntu升级为22.04,并安装了ros2 humble版本。
      ros2 humble是我自己安装的,依赖是一键安装的。
      尝试过的解决办法:
      1、我本以为将cartographer和cartographer_ros 包里的 $<LINK_LIBRARY:WHOLE_ARCHIVE,absl::log_flags>这个语句找到并加以修改,就会消除报错,但实际在项目文件夹下使用grep -r "$<LINK_LIBRARY:WHOLE_ARCHIVE,absl::log_flags>" .这个命令后,发现该语句都出现在log/的文件下,说名改语句是编译后生成的,所有此方法不行。
      2、我以为是在cartgrapher和cartgrapher_ros包的CMakeLists.txt中缺少库,但是我发现是有的。
      如果有人能解决这个问题,我将非常感谢!

      小鱼小 1 条回复 最后回复 回复 引用 0
      • 小伊小
        机器人小伊
        最后由 编辑

        您遇到的问题是由于CMake在处理$<LINK_LIBRARY:WHOLE_ARCHIVE,absl::log_flags>这个表达式时失败了。这个表达式是CMake 3.13及以上版本引入的,用于在链接库时指定整个库归档(whole archive)选项。错误提示表明CMake无法识别这个表达式,这通常意味着CMake版本过低或者配置有误。

        在ROS 2 Humble中,CMake的版本要求是CMake 3.18或更高。首先,我们需要确认您系统中的CMake版本是否满足这一要求。您可以通过以下命令检查CMake版本:

        cmake --version
        

        如果CMake版本低于3.18,您需要升级CMake。您可以通过以下步骤来安装或升级CMake:

        1. 安装CMake 3.18或更高版本:
          您可以从CMake的官方网站下载最新版本,或者使用包管理器安装(如果可用)。在Ubuntu上,您可以通过添加CMake的PPA来安装较新版本:

          sudo add-apt-repository ppa:kitware/cmake
          sudo apt-get update
          sudo apt-get install cmake
          

          确认安装后,再次检查CMake版本。

        2. 重新配置和编译Cartographer:
          在升级CMake后,您需要清除之前的构建文件并重新配置Cartographer。在您的cartographer和cartographer_ros工作区中,运行以下命令:

          cd ~/your_ros2_ws  # 替换为您的工作区目录
          rm -rf build install log
          colcon build --packages-select cartographer cartographer_ros
          

          这将清除旧的构建文件并重新构建指定的包。

        3. 检查依赖关系:
          确保所有必要的依赖项都已正确安装。您可以使用rosdep来安装缺失的依赖项:

          rosdep install --from-paths src --ignore-src --rosdistro humble -y
          

          然后再次尝试构建。

        如果以上步骤仍然无法解决问题,可能需要检查Cartographer的CMakeLists.txt文件或相关配置是否有特定于版本的更改需求,或者考虑是否有其他系统级问题影响CMake的行为。此外,查看Cartographer的官方文档或GitHub仓库的issue页面也可能提供有用的信息或已知问题的解决方案。


        以上为生成回答,仅供参考~

        我是小伊,已接入ChatGpt,所有回复,仅供参考~

        2 1 条回复 最后回复 回复 引用 0
        • 2
          2537271032 @小伊
          最后由 编辑

          @小伊 cmake 是3.22.1版本,并且依赖项都已经正确安装。

          1 条回复 最后回复 回复 引用 0
          • 小伊小
            机器人小伊
            最后由 编辑

            看起来您正在使用 CMake 版本 3.22.1,并且已经确保所有依赖项都已正确安装。这是很好的起点!CMake 是一个跨平台的自动化构建系统,它使用 CMakeLists.txt 文件来定义项目的构建过程。

            如果您现在准备开始一个项目或解决构建问题,以下是一些基本步骤和考虑因素:

            1. 确保 CMakeLists.txt 文件正确配置:

              • 确保您的 CMakeLists.txt 文件包含了正确的项目名称、C++ 标准(如果需要指定)、源文件列表、库依赖等。
              • 如果您的项目依赖于外部库,您可能需要在 CMakeLists.txt 中使用 find_package 或手动指定库路径。
            2. 生成构建文件:

              • 使用 CMake 生成适合您平台的构建文件。例如,在 Unix-like 系统(如 Linux 或 macOS)上,您可能会运行 cmake -B build -S . 来在 build 目录中生成 Makefile。
              • 在 Windows 上,您可能会生成 Visual Studio 项目文件或 MinGW Makefile,具体取决于您的编译器。
            3. 编译项目:

              • 使用生成的构建文件来编译项目。例如,在 Unix-like 系统上,您可以在生成 Makefile 后运行 cmake --build build 来编译项目。
              • 在 Windows 上,如果您生成了 Visual Studio 项目文件,您可以直接在 Visual Studio 中打开 .sln 文件并编译。
            4. 解决依赖问题:

              • 如果 CMake 在配置过程中报告缺少依赖项,确保所有必需的库都已正确安装,并且 CMake 能够找到它们。您可能需要设置环境变量(如 CMAKE_PREFIX_PATH)或使用 find_package 的 HINTS 或 PATHS 选项来指定搜索路径。
            5. 测试和验证:

              • 编译完成后,运行测试(如果有的话)来验证项目的正确性。
              • 检查任何构建警告或错误,并确保它们不会影响项目的功能。
            6. 文档和部署:

              • 确保您的项目包含必要的文档,以便其他开发者可以理解和使用您的代码。
              • 准备部署脚本或指南,以便将您的软件部署到目标环境。

            如果您在构建过程中遇到具体问题,您可能需要查看 CMake 的输出日志,以确定是哪个步骤或配置导致了问题。此外,CMake 的官方文档和社区论坛也是解决问题的好资源。


            以上为生成回答,仅供参考~

            我是小伊,已接入ChatGpt,所有回复,仅供参考~

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

              @2537271032 源码版本是不是humble的,要对应上

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

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

                @小鱼 非常感谢回答我的问题,我的版本是ros2 humble 版本,我重装了linux系统后(装的是Ubuntu 22.04的镜像),问题就没有了,我估计是我在原来的Ubuntu 20.4升级到22.04中出现了问题,所有一直报错。

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