Abhängigkeitstransformation der Abseil-Bibliothek im Kartographen

Inhaltsverzeichnis

Abhängigkeitstransformation der Abseil-Bibliothek im Kartographen

1. Anreize

Der native Kartograph verlässt sich beim Kompilieren auf Abseil, um online herunterzuladen, was problematisch ist. Daher müssen die Abhängigkeiten der Abseil-Bibliothek im Projekt cmake geändert werden.

2. Einführung in die Abseil-Bibliothek

Abseil-cpp @github
So bewerten Sie Googles Open-Source-C++-Basisbibliothek Abseil @知识

Kurz gesagt, es ähnelt der STL-Bibliothek und verfügt über einige Erweiterungen der STL-Bibliothek, einem Google-Systemprodukt.

Abseil ist eine Open-Source-Sammlung von C++-Bibliothekscode, die zur Erweiterung der C++-Standardbibliothek entwickelt wurde. Der Code der Abseil-Bibliothek stammt aus Googles eigener C++-Codebasis, wurde ausgiebig getestet und in der Produktion verwendet und ist derselbe Code, auf den wir uns bei unserer täglichen Codierungsarbeit verlassen.
In einigen Fällen stellte Abseil das bereit, was im C++-Standard fehlte; in anderen Fällen stellte Abseil Alternativen zum Standard für spezielle Anforderungen bereit, die wir durch die Verwendung in der Codebasis von Google entdeckt hatten. Wir drücken diese Situationen in dem Bibliothekscode, den wir Ihnen zur Verfügung stellen, klar aus. Abseil ist nicht als Konkurrenz zur Standardbibliothek gedacht. Wir haben gerade herausgefunden, dass viele dieser Dienstprogramme in unserer Codebasis einen Zweck erfüllen, und wir möchten diese Ressourcen nun der gesamten C++-Community zur Verfügung stellen.

3. Abseils native Online-Abhängigkeit im Kartographen

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

Es wird unter build_isolated im ROS-Arbeitsbereich heruntergeladen und kompiliert und schließlich unter install_isolated installiert. carto_grapher_ros hängt davon ab.

4. Die Abhängigkeit von Abseilen von Dritten im modifizierten Kartographen

Kompilieren und installieren Sie abseil direkt extern, entfernen Sie cmake im entsprechenden Kartographen und vereinheitlichen Sie findpackage, um es zu finden.
Die Hauptänderung finden Sie in den folgenden drei Repos:
https://github.com/kintzhao/cartographer
https://github.com/kintzhao/cartographer_ros
https://github.com/kintzhao/abseil-cpp

5. DLL-Abhängigkeiten

Die generierte Kartographer-Anwendung verfügt ähnlich wie xxx_ws/install_isolated/bin/cartographer_node über entsprechende abhängige Bibliotheken

5.1 Programmbezogene dynamische Bibliotheksabfrage

ldd xxx_ws/install_isolated/bin/cartographer_node Sehen Sie sich die entsprechenden Bibliotheksabhängigkeiten an, Sie können das entsprechende Abseil finden

$ 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 Abfragepfad der dynamischen Bibliothek

Ich habe auch festgestellt, dass die Abseil-Dynamikbibliothek offensichtlich im Systempfad installiert ist. Beim Kompilieren gibt es kein Problem, aber beim Ausführen kann sie nicht gefunden werden

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 View Abseil-Bibliothek wurde nicht gefunden

$ 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)

Bei der Installation des Deb-Pakets unter dem Ubuntu-System kann die dynamische Linkbibliothek nicht gefunden werden. ldd * -> nicht gefunden wird behoben.

Der Grund dafür ist, dass der Pfad /usr/local/lib nicht der Standardsuchpfad des Systems ist und die dynamische Bibliothek daher nicht gefunden werden kann.
[Tatsächlich kann es laut /etc/ld.so.conf Layer-by-Layer-Zeigen auf /usr/local/lib verweisen. Ich weiß nicht, wie es aussehen wird, wenn ich einen Industriecomputer habe. Wenn ja wie folgt hinzugefügt, es wird normal sein und ich werde nicht weiter danach suchen]

解决方法:将/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 

Guess you like

Origin blog.csdn.net/zyh821351004/article/details/106334347