Robotics StackExchange | Archived questions

Installing rviz on Gentoo -- Unidentified reference to YAML when linking librviz.so

OS: Gentoo Attempted package: ros-meta/desktop_full.

Here is where the build failed.

/usr/lib/gcc/x86_64-pc-linux-gnu/10.3.0/../../../../x86_64-pc-linux-gnu/bin/ld: ../../devel/lib64/librviz.so: undefined reference to `YAML::detail::node_data::mark_defined()'
/usr/lib/gcc/x86_64-pc-linux-gnu/10.3.0/../../../../x86_64-pc-linux-gnu/bin/ld: ../../devel/lib64/librviz.so: undefined reference to `YAML::Emitter::Write(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/lib/gcc/x86_64-pc-linux-gnu/10.3.0/../../../../x86_64-pc-linux-gnu/bin/ld: ../../devel/lib64/librviz.so: undefined reference to `YAML::detail::memory::create_node()'
/usr/lib/gcc/x86_64-pc-linux-gnu/10.3.0/../../../../x86_64-pc-linux-gnu/bin/ld: ../../devel/lib64/librviz.so: undefined reference to `vtable for YAML::InvalidNode'
/usr/lib/gcc/x86_64-pc-linux-gnu/10.3.0/../../../../x86_64-pc-linux-gnu/bin/ld: ../../devel/lib64/librviz.so: undefined reference to `typeinfo for YAML::InvalidNode'
/usr/lib/gcc/x86_64-pc-linux-gnu/10.3.0/../../../../x86_64-pc-linux-gnu/bin/ld: ../../devel/lib64/librviz.so: undefined reference to `typeinfo for YAML::ParserException'
/usr/lib/gcc/x86_64-pc-linux-gnu/10.3.0/../../../../x86_64-pc-linux-gnu/bin/ld: ../../devel/lib64/librviz.so: undefined reference to `YAML::Load(std::istream&)'
/usr/lib/gcc/x86_64-pc-linux-gnu/10.3.0/../../../../x86_64-pc-linux-gnu/bin/ld: ../../devel/lib64/librviz.so: undefined reference to `YAML::detail::node_data::begin()'
/usr/lib/gcc/x86_64-pc-linux-gnu/10.3.0/../../../../x86_64-pc-linux-gnu/bin/ld: ../../devel/lib64/librviz.so: undefined reference to `YAML::Null'
/usr/lib/gcc/x86_64-pc-linux-gnu/10.3.0/../../../../x86_64-pc-linux-gnu/bin/ld: ../../devel/lib64/librviz.so: undefined reference to `YAML::Emitter::Emitter()'
/usr/lib/gcc/x86_64-pc-linux-gnu/10.3.0/../../../../x86_64-pc-linux-gnu/bin/ld: ../../devel/lib64/librviz.so: undefined reference to `YAML::Emitter::Write(YAML::_Null const&)'
...
make[2]: *** [src/rviz/CMakeFiles/executable.dir/build.make:199: devel/libexec/rviz/rviz] Error 1
make[2]: Leaving directory '/var/tmp/portage/dev-ros/rviz-1.14.8/work/rviz-1.14.8_build'
Filename: None. Size: 10kb. View raw,
, hex, or download this file. 

In short, librviz.so: undefined reference to 'YAML::<INSERT THING HERE>' for a bunch of functions, classes, and variables.

It looks like librviz is trying to call YAML functions that aren't linked. Here's what I get when I lddtree the .so file:

librviz.so => /var/tmp/portage/dev-ros/rviz-1.14.8/work/rviz-1.14.8_build/devel/lib64/librviz.so (interpreter => none)
libboost_filesystem.so.1.76.0 => /usr/lib64/libboost_filesystem.so.1.76.0
    librt.so.1 => /lib64/librt.so.1
libboost_program_options.so.1.76.0 => /usr/lib64/libboost_program_options.so.1.76.0
libboost_thread.so.1.76.0 => /usr/lib64/libboost_thread.so.1.76.0
libimage_transport.so => /usr/lib64/libimage_transport.so
libresource_retriever.so => /usr/lib64/libresource_retriever.so
    libcurl.so.4 => /usr/lib64/libcurl.so.4
        libnghttp2.so.14 => /usr/lib64/libnghttp2.so.14
        libssl.so.1.1 => /usr/lib64/libssl.so.1.1
        libcrypto.so.1.1 => /usr/lib64/libcrypto.so.1.1
            libdl.so.2 => /lib64/libdl.so.2
                ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2
        libz.so.1 => /lib64/libz.so.1
libtf2_ros.so => /usr/lib64/libtf2_ros.so
    libactionlib.so => /usr/lib64/libactionlib.so
libmessage_filters.so => /usr/lib64/libmessage_filters.so
libtf2.so => /usr/lib64/libtf2.so
libclass_loader.so => /usr/lib64/libclass_loader.so
    libPocoFoundation.so.71 => /usr/lib64/libPocoFoundation.so.71
        libpcre.so.1 => /lib64/libpcre.so.1
libroslib.so => /usr/lib64/libroslib.so
    librospack.so => /usr/lib64/librospack.so
        libpython3.9.so.1.0 => /usr/lib64/libpython3.9.so.1.0
            libutil.so.1 => /lib64/libutil.so.1
libtinyxml2.so.9 => /usr/lib64/libtinyxml2.so.9
libroscpp.so => /usr/lib64/libroscpp.so
    libxmlrpcpp.so => /usr/lib64/libxmlrpcpp.so
    libcpp_common.so => /usr/lib64/libcpp_common.so
    libboost_chrono.so.1.76.0 => /usr/lib64/libboost_chrono.so.1.76.0
libpthread.so.0 => /lib64/libpthread.so.0
librosconsole.so => /usr/lib64/librosconsole.so
    librosconsole_log4cxx.so => /usr/lib64/librosconsole_log4cxx.so
    librosconsole_backend_interface.so => /usr/lib64/librosconsole_backend_interface.so
    liblog4cxx.so.11 => /usr/lib64/liblog4cxx.so.11
        libapr-1.so.0 => /usr/lib64/libapr-1.so.0
            libuuid.so.1 => /lib64/libuuid.so.1
        libaprutil-1.so.0 => /usr/lib64/libaprutil-1.so.0
            libexpat.so.1 => /usr/lib64/libexpat.so.1
            libcrypt.so.2 => /lib64/libcrypt.so.2
libroscpp_serialization.so => /usr/lib64/libroscpp_serialization.so
librostime.so => /usr/lib64/librostime.so
libconsole_bridge.so.1.0 => /usr/lib64/libconsole_bridge.so.1.0
libQt5Widgets.so.5 => /usr/lib64/libQt5Widgets.so.5
libOgreOverlay.so.1.9.0 => /usr/lib64/libOgreOverlay.so.1.9.0
    libfreetype.so.6 => /usr/lib64/libfreetype.so.6
        libbz2.so.1 => /lib64/libbz2.so.1
        libpng16.so.16 => /usr/lib64/libpng16.so.16
        libharfbuzz.so.0 => /usr/lib64/libharfbuzz.so.0
            libgraphite2.so.3 => /usr/lib64/libgraphite2.so.3
            libglib-2.0.so.0 => /usr/lib64/libglib-2.0.so.0
libOgreMain.so.1.9.0 => /usr/lib64/libOgreMain.so.1.9.0
    libXt.so.6 => /usr/lib64/libXt.so.6
        libSM.so.6 => /usr/lib64/libSM.so.6
        libICE.so.6 => /usr/lib64/libICE.so.6
            libbsd.so.0 => /usr/lib64/libbsd.so.0
                libmd.so.0 => /usr/lib64/libmd.so.0
    libXaw.so.7 => /usr/lib64/libXaw.so.7
        libXext.so.6 => /usr/lib64/libXext.so.6
        libXmu.so.6 => /usr/lib64/libXmu.so.6
        libXpm.so.4 => /usr/lib64/libXpm.so.4
    libfreeimage.so.3 => /usr/lib64/libfreeimage.so.3
        libjpeg.so.62 => /usr/lib64/libjpeg.so.62
        libtiff.so.5 => /usr/lib64/libtiff.so.5
            libzstd.so.1 => /usr/lib64/libzstd.so.1
            liblzma.so.5 => /lib64/liblzma.so.5
        libHalf-2_5.so.25 => /usr/lib64/libHalf-2_5.so.25
    libzzip.so.13 => /usr/lib64/libzzip.so.13
libOpenGL.so.0 => /usr/lib64/libOpenGL.so.0
    libGLdispatch.so.0 => /usr/lib64/libGLdispatch.so.0
libGLX.so.0 => /usr/lib64/libGLX.so.0
libX11.so.6 => /usr/lib64/libX11.so.6
    libxcb.so.1 => /usr/lib64/libxcb.so.1
        libXau.so.6 => /usr/lib64/libXau.so.6
        libXdmcp.so.6 => /usr/lib64/libXdmcp.so.6
libassimp.so.5 => /usr/lib64/libassimp.so.5
    libminizip.so.1 => /usr/lib64/libminizip.so.1
libQt5Gui.so.5 => /usr/lib64/libQt5Gui.so.5
    libGL.so.1 => /usr/lib64/libGL.so.1
libQt5Core.so.5 => /usr/lib64/libQt5Core.so.5
    libdouble-conversion.so.3 => /usr/lib64/libdouble-conversion.so.3
    libicui18n.so.69 => /usr/lib64/libicui18n.so.69
    libicuuc.so.69 => /usr/lib64/libicuuc.so.69
        libicudata.so.69 => /usr/lib64/libicudata.so.69
    libpcre2-16.so.0 => /usr/lib64/libpcre2-16.so.0
libstdc++.so.6 => /usr/lib/gcc/x86_64-pc-linux-gnu/11.2.0/libstdc++.so.6
libm.so.6 => /lib64/libm.so.6
libgcc_s.so.1 => /usr/lib/gcc/x86_64-pc-linux-gnu/11.2.0/libgcc_s.so.1
libc.so.6 => /lib64/libc.so.6

There's no YAML libraries linked here, so there's nothing providing the YAML function calls. Is there a way to link yaml-cpp into the ebuild?

Other places where I reported this bug: https://github.com/ros/ros-overlay/issues/1021 Other places where other people reported this bug: https://answers.ros.org/question/60037/errors-using-yaml-cpp-library-in-ros/ https://bugs.gentoo.org/804678

Asked by fishandmicrochips on 2021-08-06 11:24:57 UTC

Comments

Answers