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

    cartographer报错

    已定时 已固定 已锁定 已移动
    一键安装
    ubuntu 20.04 ros noetic
    3
    16
    789
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 2
      2388463215
      最后由 编辑

      cartographer报错

      背景:

      我正在安装cartographer,他在编译的时候报了一系列的错误

      运行步骤:
      catkin_make_isolated --install --use-ninja的时候一直在报错
      ​

      问题:

        545 |     auto* p = CreateMaybeMessage<::cartographer::mapping::optimization::proto::OptimizationProblemOptions>(GetArenaNoVirtual());
            |               ^~~~~~~~~~~~~~~~~~
      ./cartographer/mapping/proto/pose_graph_options.pb.h:545:106: error: expected primary-expression before ‘>’ token
        545 |     auto* p = CreateMaybeMessage<::cartographer::mapping::optimization::proto::OptimizationProblemOptions>(GetArenaNoVirtual());
            |                                                                                                          ^
      ./cartographer/mapping/proto/pose_graph_options.pb.h: In member function ‘void cartographer::mapping::proto::PoseGraphOptions::set_allocated_optimization_problem_options(cartographer::mapping::optimization::proto::OptimizationProblemOptions*)’:
      ./cartographer/mapping/proto/pose_graph_options.pb.h:559:68: error: ‘GetOwnedMessage’ is not a member of ‘google::protobuf::internal’
        559 |       optimization_problem_options = ::google::protobuf::internal::GetOwnedMessage(
            |                                                                    ^~~~~~~~~~~~~~~
      ./cartographer/mapping/proto/pose_graph_options.pb.h: In member function ‘cartographer::mapping::proto::PoseGraphOptions_OverlappingSubmapsTrimmerOptions2D* cartographer::mapping::proto::PoseGraphOptions::mutable_overlapping_submaps_trimmer_2d()’:
      ./cartographer/mapping/proto/pose_graph_options.pb.h:655:15: error: ‘CreateMaybeMessage’ was not declared in this scope
        655 |     auto* p = CreateMaybeMessage<::cartographer::mapping::proto::PoseGraphOptions_OverlappingSubmapsTrimmerOptions2D>(GetArenaNoVirtual());
            |               ^~~~~~~~~~~~~~~~~~
      ./cartographer/mapping/proto/pose_graph_options.pb.h:655:117: error: expected primary-expression before ‘>’ token
        655 |     auto* p = CreateMaybeMessage<::cartographer::mapping::proto::PoseGraphOptions_OverlappingSubmapsTrimmerOptions2D>(GetArenaNoVirtual());
            |                                                                                                                     ^
      ./cartographer/mapping/proto/pose_graph_options.pb.h: In member function ‘void cartographer::mapping::proto::PoseGraphOptions::set_allocated_overlapping_submaps_trimmer_2d(cartographer::mapping::proto::PoseGraphOptions_OverlappingSubmapsTrimmerOptions2D*)’:
      ./cartographer/mapping/proto/pose_graph_options.pb.h:669:70: error: ‘GetOwnedMessage’ is not a member of ‘google::protobuf::internal’
        669 |       overlapping_submaps_trimmer_2d = ::google::protobuf::internal::GetOwnedMessage(
            |                                                                      ^~~~~~~~~~~~~~~
      ninja: build stopped: subcommand failed.
      <== Failed to process package 'cartographer': 
        Command '['ninja', '-j12', '-l12']' returned non-zero exit status 1.
      
      Reproduce this error by running:
      ==> cd /home/dt/cartographer_ros/build_isolated/cartographer && ninja -j12 -l12
      
      Command failed, exiting.
      
      

      如果有人能够解释为什么会发生这种情况,、我将非常感激!

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

        从你提供的错误信息来看,问题主要出现在protobuf的自动生成代码中,特别是在处理CreateMaybeMessage和GetOwnedMessage等函数时。这些错误通常与protobuf的编译器(protoc)的版本或者protobuf库的版本与Cartographer依赖的版本不匹配有关。以下是一些可能的解决步骤:

        1. 检查Protobuf版本:
          Cartographer通常有一个推荐的protobuf版本。你需要确保你的系统上安装的protobuf版本与Cartographer的依赖相匹配。可以查看Cartographer的官方文档或者其CMakeLists.txt文件来确认这一点。

          你可以通过运行以下命令来检查你的protobuf版本:

          protoc --version
          

          如果版本不匹配,你需要安装正确版本的protobuf。可以通过源码编译或者使用包管理器(如apt, yum, brew等)来安装。

        2. 清理并重新编译:
          在更改protobuf版本或修复任何依赖项后,你需要彻底清理旧的编译文件,并重新编译Cartographer。你可以使用以下命令来清理:

          rm -rf /home/dt/cartographer_ros/build_isolated/cartographer
          catkin_make_isolated --install --use-ninja
          
        3. 检查CMakeLists.txt:
          确保Cartographer的CMakeLists.txt文件正确设置了protobuf的路径和版本。有时候,如果protobuf库安装在非标准路径下,你可能需要在CMake中指定这些路径。

        4. 检查环境变量:
          确保你的环境变量(如LD_LIBRARY_PATH和PATH)包含了protobuf库的路径,以便编译器和链接器可以找到它们。

        5. 查看编译日志:
          如果问题仍然存在,仔细查看编译日志可能会提供更多线索。特别注意与protobuf相关的部分,看看是否有任何关于找不到头文件或库的警告或错误。

        6. 更新Cartographer:
          如果你正在使用的Cartographer版本较旧,尝试更新到最新版本。开发者可能已经修复了与特定protobuf版本相关的问题。

        7. 社区和文档:
          访问Cartographer的GitHub页面、官方文档或社区论坛,看看是否有其他人遇到并解决了类似的问题。

        通过上述步骤,你应该能够诊断并解决编译Cartographer时遇到的问题。如果问题仍然存在,请提供更详细的编译日志和系统信息,以便进一步分析。


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

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

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

          @小伊 我的版本是libprotoc 3.4.0网上查询是推荐版本哦

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

            关于您提到的libprotoc 3.4.0版本,它是Protocol Buffers(protobuf)编译器的一个具体版本。Protocol Buffers是由Google开发的一种数据序列化协议,广泛用于结构化数据的编组和解组,特别是在网络通信和数据存储等领域。libprotoc是protobuf的编译器库,而protoc则是protobuf编译器本身的可执行文件,用于将.proto文件转换为不同编程语言的源代码。

            关于libprotoc 3.4.0版本的特点和使用

            1. 版本兼容性:

              • libprotoc 3.4.0是一个特定的版本,它在发布时可能针对某些特性或修复了之前的bug。然而,需要注意的是,随着技术的发展和项目的更新,旧版本的库可能不再完全兼容新的项目需求或最新的软件环境。
            2. 推荐版本:

              • 网上查询推荐libprotoc 3.4.0版本可能是因为该版本在某个特定时期或特定项目中被广泛使用,并且表现稳定。然而,这并不意味着它是所有项目或所有情况下的最佳选择。选择哪个版本通常取决于项目的具体需求、依赖关系以及与其他软件的兼容性。
            3. 安装与配置:

              • 安装libprotoc 3.4.0通常涉及从Google的GitHub仓库或其他可靠的源下载相应的源代码或预编译包,并按照安装说明进行安装。
              • 在安装过程中,可能需要设置环境变量(如PATH、LD_LIBRARY_PATH等),以确保编译器和库文件能够被系统正确识别和使用。
            4. 使用场景:

              • libprotoc 3.4.0可用于将.proto文件编译成C++、Java、Python等多种编程语言的源代码,这些源代码提供了方便的数据序列化和反序列化的API。
              • 它适用于需要跨平台、跨语言数据交换的项目,特别是在网络通信、数据存储等领域。

            注意事项

            • 版本更新:
              • 由于技术不断发展,protobuf及其编译器库也会不断更新。因此,建议定期检查是否有新的版本发布,并根据项目需求进行更新。
            • 兼容性测试:
              • 在将libprotoc升级或降级到不同版本时,建议进行充分的兼容性测试,以确保新版本不会破坏现有功能或引入新的问题。
            • 依赖管理:
              • 如果项目依赖于多个库或框架,并且这些依赖项之间存在版本冲突,那么选择合适的libprotoc版本可能会变得更加复杂。在这种情况下,建议使用依赖管理工具(如Maven、Gradle、pip等)来管理项目的依赖关系。

            总之,libprotoc 3.4.0是一个特定版本的protobuf编译器库,它在某些情况下可能是推荐版本。然而,在选择使用哪个版本时,需要综合考虑项目的具体需求、依赖关系以及与其他软件的兼容性。


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

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

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

              @小伊 还是存在问题,有大佬能帮忙看看吗

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

                当然,我很愿意帮助你解决问题,但是具体的帮助需要基于你遇到的具体问题。不过,我可以提供一些通用的步骤和建议,这些可能有助于你定位和解决问题:

                1. 详细描述问题:

                  • 首先,确保你能够清楚地描述你遇到的问题。问题发生的环境(如操作系统、使用的软件或编程语言)、出现的具体症状(如错误信息、程序崩溃、性能问题等)以及你尝试过的解决方案。
                2. 查看错误日志:

                  • 如果你的应用或系统有生成错误日志,查看这些日志可能会提供关于问题原因的线索。
                3. 简化问题:

                  • 尝试将问题简化到最小可复现的情况。这有助于确定问题的根本原因。例如,如果你在一个大型项目中遇到问题,尝试创建一个只包含问题代码的小项目。
                4. 搜索相似问题:

                  • 利用搜索引擎(如Google、Stack Overflow等)搜索你遇到的问题。很可能有人已经遇到过类似的问题,并找到了解决方案。
                5. 更新和兼容性检查:

                  • 确保你的所有软件(包括操作系统、编程语言环境、库和框架)都更新到最新版本。有时候,问题可能是由于使用了过时的软件或库导致的。
                  • 检查你的代码或项目是否与你正在使用的软件版本兼容。
                6. 代码审查:

                  • 仔细检查你的代码,特别是出错的部分。有时候,问题可能是由于一个小错误(如拼写错误、逻辑错误等)导致的。
                7. 调试:

                  • 使用调试工具来逐步执行你的代码,观察变量的值和程序的执行流程。这有助于你理解程序在何处出现问题。
                8. 请求帮助:

                  • 如果上述步骤都无法解决问题,你可以考虑在相关的社区或论坛上发帖求助。在请求帮助时,确保你提供了足够的信息,以便其他人能够理解你的问题并帮助你找到解决方案。

                如果你能提供更多关于你遇到的问题的具体信息,我可以给出更具体的建议。希望这些通用的步骤和建议能对你有所帮助!


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

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

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

                  @2388463215 这个和版本关联性很强,你需要报上各个版本号

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

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

                    @小鱼 您好,cmake 3.16.3,libprotoc 3.21.1,ros noetic,eigen3 3.3.7 ,

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

                      @小鱼 主机使用的是中控机x64的系统架构

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

                        @2388463215 代码版本呢

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

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

                          @小鱼 这个我不太清楚,不是很会看

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

                            @2388463215 你代码哪里来的你知道吗

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

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

                              @小鱼 git clone https://github.com/cartographer-project/cartographer.git
                              git clone https://github.com/cartographer-project/cartographer_ros.git
                              这两个命令

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

                                @2388463215 要切换分支哇兄弟

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

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

                                  @小鱼 怎么切换呢

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

                                    @2388463215 363f727a-4e0a-4ad3-8a98-2c5f9edb0742-image.png

                                    来自《ROS 2机器人开发从入门到实践》5.6.3 掌握Git分支

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

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