TOC
原生的cartographer编译时是依赖abseil在线下载的,比较麻烦,所以需要在工程cmake改造下abseil库的依赖关系。
abseil-cpp @github
如何评价 Google 开源其 C++ 基础库 Abseil @知乎
简而言之,就是类似STL库同时对STL库作了些扩展, Google体系产品。
Abseil是C ++库代码的开源集合,旨在增强C ++标准库。Abseil库代码是从Google自己的C ++代码库中收集的,已经过广泛测试并在生产中使用,并且与我们日常编码工作中所依赖的代码相同。
在某些情况下,Abseil提供了C ++标准中缺少的内容;在其他情况下,Abseil提供了针对标准的替代方法,以满足我们通过在Google代码库中的使用而发现的特殊需求。我们会在我们提供给您的库代码中清楚地表示这些情况。Abseil并不意味着要成为标准库的竞争对手。我们刚刚发现,这些实用程序中有许多实用程序在我们的代码库中起到了一定的作用,我们现在希望将这些资源作为一个整体提供给C ++社区。
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会依赖它。
直接外部编译abseil并安装, 去掉相应的cartographer中的cmake, 统一一findpackage去查找。
主要的修改见下面三个repo:
https://github.com/kintzhao/cartographer
https://github.com/kintzhao/cartographer_ros
https://github.com/kintzhao/abseil-cpp
生成的cartographer应用程序,类似xxx_ws/install_isolated/bin/cartographer_node会有相应的依赖库
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)
也遇到过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