cartographer中abseil库依赖改造

44 篇文章 0 订阅
25 篇文章 4 订阅

TOC

cartographer中abseil库依赖改造

1. 诱因

原生的cartographer编译时是依赖abseil在线下载的,比较麻烦,所以需要在工程cmake改造下abseil库的依赖关系。

2. abseil 库介绍

abseil-cpp @github
如何评价 Google 开源其 C++ 基础库 Abseil @知乎

简而言之,就是类似STL库同时对STL库作了些扩展, Google体系产品。

Abseil是C ++库代码的开源集合,旨在增强C ++标准库。Abseil库代码是从Google自己的C ++代码库中收集的,已经过广泛测试并在生产中使用,并且与我们日常编码工作中所依赖的代码相同。
在某些情况下,Abseil提供了C ++标准中缺少的内容;在其他情况下,Abseil提供了针对标准的替代方法,以满足我们通过在Google代码库中的使用而发现的特殊需求。我们会在我们提供给您的库代码中清楚地表示这些情况。Abseil并不意味着要成为标准库的竞争对手。我们刚刚发现,这些实用程序中有许多实用程序在我们的代码库中起到了一定的作用,我们现在希望将这些资源作为一个整体提供给C ++社区。

3. 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}"
  )

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

4. 修改后的cartographer中abseil的第三方依赖

直接外部编译abseil并安装, 去掉相应的cartographer中的cmake, 统一一findpackage去查找。
主要的修改见下面三个repo:
https://github.com/kintzhao/cartographer
https://github.com/kintzhao/cartographer_ros
https://github.com/kintzhao/abseil-cpp

5. 动态链接库的依赖关系

生成的cartographer应用程序,类似xxx_ws/install_isolated/bin/cartographer_node会有相应的依赖库

5.1 程序相关动态库查询

ldd xxx_ws/install_isolated/bin/cartographer_node 查看相应的库依赖,可以找到对应的abseil

$ ldd cartographer_node 
	linux-vdso.so.1 =>  (0x00007ffcb1dfa000)
	libglog.so.0 => /usr/lib/x86_64-linux-gnu/libglog.so.0 (0x00007f00732e5000)
	libgflags.so.2 => /usr/lib/x86_64-linux-gnu/libgflags.so.2 (0x00007f00730c4000)
	libcholmod.so.3.0.6 => /usr/lib/x86_64-linux-gnu/libcholmod.so.3.0.6 (0x00007f0072df0000)
	liblapack.so.3 => /usr/lib/liblapack.so.3 (0x00007f007260c000)
	libf77blas.so.3 => /usr/lib/libf77blas.so.3 (0x00007f00723ec000)
	librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f00721e4000)
	libcxsparse.so.3.1.4 => /usr/lib/x86_64-linux-gnu/libcxsparse.so.3.1.4 (0x00007f0071fba000)
	libgomp.so.1 => /usr/lib/x86_64-linux-gnu/libgomp.so.1 (0x00007f0071d98000)
	liblua5.2.so.0 => /usr/lib/x86_64-linux-gnu/liblua5.2.so.0 (0x00007f0071b66000)
	libcairo.so.2 => /usr/lib/x86_64-linux-gnu/libcairo.so.2 (0x00007f0071852000)
	libabsl_hash.so => /usr/local/lib/libabsl_hash.so (0x00007f007164e000)
	libabsl_city.so => /usr/local/lib/libabsl_city.so (0x00007f0071449000)
	libabsl_hashtablez_sampler.so => /usr/local/lib/libabsl_hashtablez_sampler.so (0x00007f0071243000)
	libabsl_bad_optional_access.so => /usr/local/lib/libabsl_bad_optional_access.so (0x00007f0071040000)
	libabsl_str_format_internal.so => /usr/local/lib/libabsl_str_format_internal.so (0x00007f0070e02000)
	libabsl_synchronization.so => /usr/local/lib/libabsl_synchronization.so (0x00007f0070be8000)
	libabsl_strings.so => /usr/local/lib/libabsl_strings.so (0x00007f00709b6000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f0070799000)
	libabsl_throw_delegate.so => /usr/local/lib/libabsl_throw_delegate.so (0x00007f0070593000)
	libyaml-cpp.so.0.5 => /usr/lib/x86_64-linux-gnu/libyaml-cpp.so.0.5 (0x00007f0070316000)
	libboost_system.so.1.58.0 => /usr/lib/x86_64-linux-gnu/libboost_system.so.1.58.0 (0x00007f0070112000)
	libpcl_common.so.1.7 => /usr/lib/x86_64-linux-gnu/libpcl_common.so.1.7 (0x00007f006fe58000)
	libtf2_ros.so => /opt/ros/kinetic/lib/libtf2_ros.so (0x00007f006fbad000)
	libtf2.so => /opt/ros/kinetic/lib/libtf2.so (0x00007f006f979000)
	libroscpp.so => /opt/ros/kinetic/lib/libroscpp.so (0x00007f006f5dd000)
	librosconsole.so => /opt/ros/kinetic/lib/librosconsole.so (0x00007f006f3ab000)
	libroscpp_serialization.so => /opt/ros/kinetic/lib/libroscpp_serialization.so (0x00007f006f1a8000)
	librostime.so => /opt/ros/kinetic/lib/librostime.so (0x00007f006ef7b000)
	libboost_iostreams.so.1.58.0 => /usr/lib/x86_64-linux-gnu/libboost_iostreams.so.1.58.0 (0x00007f006ed62000)
	libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f006e9e0000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f006e6d7000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f006e4c1000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f006e0f7000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f0073514000)
	libunwind.so.8 => /usr/lib/x86_64-linux-gnu/libunwind.so.8 (0x00007f006dedc000)
	libblas.so.3 => /usr/lib/libblas.so.3 (0x00007f006dc9e000)
	libamd.so.2.4.1 => /usr/lib/x86_64-linux-gnu/libamd.so.2.4.1 (0x00007f006da95000)
	libcolamd.so.2.9.1 => /usr/lib/x86_64-linux-gnu/libcolamd.so.2.9.1 (0x00007f006d88e000)
	libcamd.so.2.4.1 => /usr/lib/x86_64-linux-gnu/libcamd.so.2.4.1 (0x00007f006d684000)
	libccolamd.so.2.9.1 => /usr/lib/x86_64-linux-gnu/libccolamd.so.2.9.1 (0x00007f006d479000)
	libsuitesparseconfig.so.4.4.6 => /usr/lib/x86_64-linux-gnu/libsuitesparseconfig.so.4.4.6 (0x00007f006d276000)
	libatlas.so.3 => /usr/lib/libatlas.so.3 (0x00007f006ccd8000)
	libgfortran.so.3 => /usr/lib/x86_64-linux-gnu/libgfortran.so.3 (0x00007f006c9ad000)
	libcblas.so.3 => /usr/lib/libcblas.so.3 (0x00007f006c78b000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f006c587000)
	libpixman-1.so.0 => /usr/lib/x86_64-linux-gnu/libpixman-1.so.0 (0x00007f006c2df000)
	libfontconfig.so.1 => /usr/lib/x86_64-linux-gnu/libfontconfig.so.1 (0x00007f006c09c000)
	libfreetype.so.6 => /usr/lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007f006bdf2000)
	libpng12.so.0 => /lib/x86_64-linux-gnu/libpng12.so.0 (0x00007f006bbcd000)
	libxcb-shm.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0 (0x00007f006b9c9000)
	libxcb-render.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-render.so.0 (0x00007f006b7bf000)
	libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f006b59d000)
	libXrender.so.1 => /usr/lib/x86_64-linux-gnu/libXrender.so.1 (0x00007f006b393000)
	libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007f006b059000)
	libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007f006ae47000)
	libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f006ac2d000)
	libabsl_exponential_biased.so => /usr/local/lib/libabsl_exponential_biased.so (0x00007f006aa2b000)
	libabsl_stacktrace.so => /usr/local/lib/libabsl_stacktrace.so (0x00007f006a828000)
	libabsl_time.so => /usr/local/lib/libabsl_time.so (0x00007f006a5fd000)
	libabsl_raw_logging_internal.so => /usr/local/lib/libabsl_raw_logging_internal.so (0x00007f006a3f9000)
	libabsl_int128.so => /usr/local/lib/libabsl_int128.so (0x00007f006a1f1000)
	libabsl_graphcycles_internal.so => /usr/local/lib/libabsl_graphcycles_internal.so (0x00007f0069fe7000)
	libabsl_symbolize.so => /usr/local/lib/libabsl_symbolize.so (0x00007f0069dde000)
	libabsl_malloc_internal.so => /usr/local/lib/libabsl_malloc_internal.so (0x00007f0069bd7000)
	libabsl_base.so => /usr/local/lib/libabsl_base.so (0x00007f00699ce000)
	libabsl_strings_internal.so => /usr/local/lib/libabsl_strings_internal.so (0x00007f00697ca000)
	libboost_thread.so.1.58.0 => /usr/lib/x86_64-linux-gnu/libboost_thread.so.1.58.0 (0x00007f00695a4000)
	libactionlib.so => /opt/ros/kinetic/lib/libactionlib.so (0x00007f0069384000)
	libconsole_bridge.so.0.2 => /usr/lib/x86_64-linux-gnu/libconsole_bridge.so.0.2 (0x00007f006917f000)
	libxmlrpcpp.so => /opt/ros/kinetic/lib/libxmlrpcpp.so (0x00007f0068f60000)
	libcpp_common.so => /opt/ros/kinetic/lib/libcpp_common.so (0x00007f0068d58000)
	libboost_chrono.so.1.58.0 => /usr/lib/x86_64-linux-gnu/libboost_chrono.so.1.58.0 (0x00007f0068b50000)
	libboost_filesystem.so.1.58.0 => /usr/lib/x86_64-linux-gnu/libboost_filesystem.so.1.58.0 (0x00007f0068938000)
	librosconsole_log4cxx.so => /opt/ros/kinetic/lib/librosconsole_log4cxx.so (0x00007f006871f000)
	librosconsole_backend_interface.so => /opt/ros/kinetic/lib/librosconsole_backend_interface.so (0x00007f006851d000)
	liblog4cxx.so.10 => /usr/lib/x86_64-linux-gnu/liblog4cxx.so.10 (0x00007f0068146000)
	libboost_regex.so.1.58.0 => /usr/lib/x86_64-linux-gnu/libboost_regex.so.1.58.0 (0x00007f0067e3e000)
	libbz2.so.1.0 => /lib/x86_64-linux-gnu/libbz2.so.1.0 (0x00007f0067c2e000)
	liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007f0067a0c000)
	libquadmath.so.0 => /usr/lib/x86_64-linux-gnu/libquadmath.so.0 (0x00007f00677cd000)
	libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007f00675a4000)
	libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f00673a0000)
	libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f006719a000)
	libabsl_debugging_internal.so => /usr/local/lib/libabsl_debugging_internal.so (0x00007f0066f93000)
	libabsl_time_zone.so => /usr/local/lib/libabsl_time_zone.so (0x00007f0066d40000)
	libabsl_demangle_internal.so => /usr/local/lib/libabsl_demangle_internal.so (0x00007f0066b36000)
	libabsl_spinlock_wait.so => /usr/local/lib/libabsl_spinlock_wait.so (0x00007f0066933000)
	libapr-1.so.0 => /usr/lib/x86_64-linux-gnu/libapr-1.so.0 (0x00007f0066701000)
	libaprutil-1.so.0 => /usr/lib/x86_64-linux-gnu/libaprutil-1.so.0 (0x00007f00664da000)
	libicui18n.so.55 => /usr/lib/x86_64-linux-gnu/libicui18n.so.55 (0x00007f0066078000)
	libicuuc.so.55 => /usr/lib/x86_64-linux-gnu/libicuuc.so.55 (0x00007f0065ce4000)
	libabsl_dynamic_annotations.so => /usr/local/lib/libabsl_dynamic_annotations.so (0x00007f0065ae1000)
	libuuid.so.1 => /lib/x86_64-linux-gnu/libuuid.so.1 (0x00007f00658dc000)
	libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007f00656a4000)
	libicudata.so.55 => /usr/lib/x86_64-linux-gnu/libicudata.so.55 (0x00007f0063bed000)

5.2 动态库查询路径

也遇到过abseil动态库明明安装到系统路径下, 编译没有问题,运行时出现找不到

error while loading shared libraries: libabsl_hash.so: cannot open shared object file: No such file or directory
error while loading shared libraries: libabsl_synchronization.so: cannot open shared obj
ect file: No such file or directory

ldd 查看abseil库也是 not found

$ ldd ./install_isolated/bin/mapper 
        linux-vdso.so.1 =>  (0x00007ffed11f6000)
        libglog.so.0 => /usr/lib/x86_64-linux-gnu/libglog.so.0 (0x00007f8ab078c000)
        libgflags.so.2 => /usr/lib/x86_64-linux-gnu/libgflags.so.2 (0x00007f8ab056b000)
        libcholmod.so.3.0.6 => /usr/lib/x86_64-linux-gnu/libcholmod.so.3.0.6 (0x00007f8ab0297000)
        liblapack.so.3 => /usr/lib/liblapack.so.3 (0x00007f8aafa9f000)
        libblas.so.3 => /usr/lib/libblas.so.3 (0x00007f8aaf830000)
        librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f8aaf628000)
        libcxsparse.so.3.1.4 => /usr/lib/x86_64-linux-gnu/libcxsparse.so.3.1.4 (0x00007f8aaf3fe000)
        libgomp.so.1 => /usr/lib/x86_64-linux-gnu/libgomp.so.1 (0x00007f8aaf1dc000)
        liblua5.2.so.0 => /usr/lib/x86_64-linux-gnu/liblua5.2.so.0 (0x00007f8aaefaa000)
        libcairo.so.2 => /usr/lib/x86_64-linux-gnu/libcairo.so.2 (0x00007f8aaec96000)
        libabsl_hash.so => not found
        libabsl_city.so => not found
        libabsl_hashtablez_sampler.so => not found
        libabsl_bad_optional_access.so => not found
        libabsl_str_format_internal.so => not found
        libabsl_synchronization.so => not found
        libabsl_strings.so => not found
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f8aaea79000)
        libabsl_throw_delegate.so => not found
        libyaml-cpp.so.0.5 => /usr/lib/x86_64-linux-gnu/libyaml-cpp.so.0.5 (0x00007f8aae7fc000)
        libboost_system.so.1.58.0 => /usr/lib/x86_64-linux-gnu/libboost_system.so.1.58.0 (0x00007f8aae5f8000)
        libpcl_common.so.1.7 => /usr/lib/x86_64-linux-gnu/libpcl_common.so.1.7 (0x00007f8aae33e000)
        libtf2_ros.so => /opt/ros/kinetic/lib/libtf2_ros.so (0x00007f8aae093000)
        libtf2.so => /opt/ros/kinetic/lib/libtf2.so (0x00007f8aade5f000)

参考ubuntu系统下安装deb包时,动态链接库找不到,ldd * -> not found解决;

原因是由于/usr/local/lib这个路径不是系统的默认搜索路径,因此,找不到这个动态库.
【其实依据/etc/ld.so.conf层层指向是可以指向/usr/local/lib的,不知道我有台工控机怎么会出现,如下加入正常了也就没继续找了】

解决方法:将/usr/local/lib路径添加到系统默认的搜索路径中
1、添加路径: sudo vim /etc/ld.so.conf
在文件末尾添加需要搜索的路径/usr/local/lib,如下:
include /etc/ld.so.conf.d/*.conf
/usr/local/lib
 
2、使修改生效
sudo /sbin/ldconfig 

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值