• cartographer 编译遇到 abseil的问题


    1 abseil是做什么的

    Abseil是C ++库代码的开源集合,旨在增强C ++标准库。Abseil库代码是从Google自己的C ++代码库中收集的,已经过广泛测试并在生产中使用,并且与我们日常编码工作中所依赖的代码相同。
    
    • 1

    在某些情况下,Abseil提供了C ++标准中缺少的内容;在其他情况下,Abseil提供了针对标准的替代方法,以满足我们通过在Google代码库中的使用而发现的特殊需求。我们会在我们提供给您的库代码中清楚地表示这些情况。Abseil并不意味着要成为标准库的竞争对手。
    参见:如何评价 Google 开源其 C++ 基础库 Abseil?

    2 在编译的时候遇到abseil错误怎么办

       multiple rules generate abseil
       等其他与abseil相关的错误
    
    • 1
    • 2

    这里参照:cartographer中abseil库依赖改造

    cartographer中abseil的原生在线依赖

    cartographer/blob/master/cmake/modules/FindAbseil.cmake#L66

      ExternalProject_Add(${ABSEIL_PROJECT_NAME}
        PREFIX ${ABSEIL_PROJECT_NAME}
        GIT_REPOSITORY   https://github.com/abseil/abseil-cpp.git
        GIT_TAG          7b46e1d31a6b08b1c6da2a13e7b151a20446fa07
        INSTALL_COMMAND  ""
        BUILD_COMMAND    ${CMAKE_COMMAND} --build "${ABSEIL_PROJECT_BUILD_DIR}"
        CMAKE_CACHE_ARGS "-DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON;-DBUILD_TESTING:BOOL=OFF;-DCMAKE_BUILD_TYPE:STRING=Release"
        BUILD_BYPRODUCTS "${ABSEIL_LIBRARY_PATH};${ABSEIL_DEPENDENT_LIBRARIES}"
      )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    会在ros的工作空间下的build_isolated下下载编译,并最后安装在install_isolated, carto_grapher_ros会依赖它。

    3 记录 :

    1 安装abseil

    	
    set -o errexit
    set -o verbose
    
    git clone https://github.com/abseil/abseil-cpp.git
    cd abseil-cpp
    git checkout d902eb869bcfacc1bad14933ed9af4bed006d481
    mkdir build
    cd build
    cmake -G Ninja \
      -DCMAKE_BUILD_TYPE=Release \
      -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
      -DCMAKE_INSTALL_PREFIX=/usr/local/stow/absl \
      ..
    ninja
    sudo ninja install
    cd /usr/local/stow
    sudo stow absl
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    2 cartographer中

    /src/cartographer/CMakeLists.txt
    CMakeList.txt 第1处:

    find_package(Abseil REQUIRED) --> find_package(absl REQUIRED)
    
    • 1
    CMakeList.txt 第2处:#默认的库文件是 standalone_absl
    
    • 1
    target_link_libraries(${PROJECT_NAME} PUBLIC ${PROTOBUF_LIBRARY}
    absl::base
    absl::synchronization
    absl::strings
    absl::flat_hash_map
    absl::numeric
    absl::flags)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    /src/cartographer/cartographer-config.cmake.in 1处

    find_package(Abseil ${QUIET_OR_REQUIRED_OPTION}) Abseil 改为 absl
    
    • 1

    3 cartographer_ros中

    /src/cartographer_ros/cartographer_ros/CMakeLists.txt

    find_package(Abseil REQUIRED)  -->find_package(absl REQUIRED)
    
    • 1

    4 cartographer_rviz中

    /src/cartographer_ros/cartographer_rviz/CMakeLists.txt

    find_package(Abseil REQUIRED)  -->find_package(absl REQUIRED)
    
    • 1

    4

    重新编译

    另外如果在package里面想要调用同workspace其他的package
    1.在Cmakelists.txt 里面
    
    • 1
    • 2
    	set(PACKAGE_DEPENDENCIES
    
    		xxxx
      )
    
    • 1
    • 2
    • 3
    • 4
    2.在package.xml中
    xxxx
    
    • 1
    • 2
  • 相关阅读:
    如何系列 如何玩转远程调用之OpenFegin+SpringBoot(非Cloud)
    算法通过村第十七关-贪心|白银笔记|贪心高频问题
    Scala 的学习笔记
    SQL优化思路整理
    Linux 进程替换深剖
    基于 CC2530 的多功能 ZigBee 继电器、开关、传感器和路由器的详细实现与JavaScript编码
    世界国旗/地图:世界各国国旗图标整理/与echarts世界地图配置对应
    SQL必需掌握的100个重要知识点:插入数据
    Windows电脑显示部分功能被组织控制
    Java调用ApacheOpenOffice将Word转PDF
  • 原文地址:https://blog.csdn.net/u010647296/article/details/125897259