libyaml-cpp.so.0.7: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_create(unsigned long&, unsigned long)@GLIBCXX_3.4.21'

Bug #1958984 reported by Michał Sawicz
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
gcc-defaults (Ubuntu)
New
Undecided
Unassigned

Bug Description

After the most recent updates (11.2.0-14ubuntu1) mir started to FTBFS:

/usr/bin/c++ -g -O2 -ffile-prefix-map=/<<BUILDDIR>>/mir-2.6.0+dev100-gf11f678968=. -flto=auto -ffat-lto-objects -flto=auto -ffat-lto-objects -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -pthread -g -Wall -fno-strict-aliasing -pedantic -Wnon-virtual-dtor -Wextra -fPIC -Werror -Wno-mismatched-tags -Wno-psabi -flto -ffat-lto-objects -Wl,-Bsymbolic-functions -flto=auto -ffat-lto-objects -flto=auto -Wl,-z,relro -Wl,--as-needed -Wl,--no-undefined CMakeFiles/miral-system-compositor.dir/system_compositor_main.cpp.o -o ../../bin/miral-system-compositor.bin ../../lib/libmiral.so.4 ../../lib/libmircommon.so.8 ../../lib/libmircookie.so.2 -lnettle /usr/lib/x86_64-linux-gnu/libboost_date_time.so.1.74.0 /usr/lib/x86_64-linux-gnu/libboost_program_options.so.1.74.0 /usr/lib/x86_64-linux-gnu/libboost_filesystem.so.1.74.0 /usr/lib/x86_64-linux-gnu/libboost_iostreams.so.1.74.0 -ldl /usr/lib/x86_64-linux-gnu/libxkbcommon.so ../../lib/libmircore.so.1 /usr/lib/x86_64-linux-gnu/libboost_system.so.1.74.0 -L/usr/lib/x86_64-linux-gnu -Wl,-rpath-link,/<<BUILDDIR>>/mir-2.6.0+dev100-gf11f678968/build-amd64/lib
/usr/bin/ld: /lib/x86_64-linux-gnu/libyaml-cpp.so.0.7: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_create(unsigned long&, unsigned long)@GLIBCXX_3.4.21'
collect2: error: ld returned 1 exit status

Disabling LTO helps:

DEB_BUILD_MAINT_OPTIONS = optimization=-lto

ProblemType: Bug
DistroRelease: Ubuntu 22.04
Package: gcc 4:11.2.0-1ubuntu1
ProcVersionSignature: User Name 5.15.0-17.17-generic 5.15.12
Uname: Linux 5.15.0-17-generic aarch64
ApportVersion: 2.20.11-0ubuntu75
Architecture: arm64
CasperMD5CheckResult: unknown
Date: Tue Jan 25 13:54:49 2022
ProcEnviron:
 TERM=screen-256color
 PATH=(custom, no user)
 XDG_RUNTIME_DIR=<set>
 LANG=C.UTF-8
 SHELL=/bin/bash
SourcePackage: gcc-defaults
UpgradeStatus: No upgrade log present (probably fresh install)

Revision history for this message
Michał Sawicz (saviq) wrote :
description: updated
Revision history for this message
Michał Sawicz (saviq) wrote :
Revision history for this message
Chris Halse Rogers (raof) wrote :

Ok. This would appear to be a ld bug. In a partially built tree, I get:

> /usr/bin/c++ -g -O2 -ffile-prefix-map=/home/chris/Canonical/Mir/mir/main/cmake-build-debug=. -flto=auto -ffat-lto-objects -flto=auto -ffat-lto-objects -fstack-protector-strong -Wformat -Werror=format-security -pthread -g -Wall -fno-strict-aliasing -pedantic -Wnon-virtual-dtor -Wextra -fPIC -Werror -Wno-mismatched-tags -Wno-psabi -g -Wl,-Bsymbolic-functions -flto=auto -ffat-lto-objects -flto=auto -Wl,-z,relro -Wl,--as-needed -Wl,--no-undefined examples/miral-system-compositor/CMakeFiles/miral-system-compositor.dir/system_compositor_main.cpp.o -o bin/miral-system-compositor.bin lib/libmiral.so.4 lib/libmircommon.so.8 lib/libmircookie.so.2 -lnettle /usr/lib/x86_64-linux-gnu/libboost_date_time.so.1.74.0 /usr/lib/x86_64-linux-gnu/libboost_program_options.so.1.74.0 /usr/lib/x86_64-linux-gnu/libboost_filesystem.so.1.74.0 /usr/lib/x86_64-linux-gnu/libboost_iostreams.so.1.74.0 -ldl /usr/lib/x86_64-linux-gnu/libxkbcommon.so lib/libmircore.so.1 /usr/lib/x86_64-linux-gnu/libboost_system.so.1.74.0 -L/usr/lib/x86_64-linux-gnu -Wl,-rpath-link,/home/chris/Canonical/Mir/mir/main/cmake-build-debug/lib
/usr/bin/ld: /lib/x86_64-linux-gnu/libyaml-cpp.so.0.7: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_create(unsigned long&, unsigned long)@GLIBCXX_3.4.21'
collect2: error: ld returned 1 exit status

This symbol, with correct version, is defined in libstdc++.so.6:
objdump -T -C /lib/x86_64-linux-gnu/libstdc++.so.6 | rg "std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_create"
0000000000146910 w DF .text 000000000000005c GLIBCXX_3.4.21 std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_create(unsigned long&, unsigned long)

Adding -fuse-ld=gold or -fuse-ld=lld to the command line results in a successful link.

It doesn't seem to be a problem of the /usr/bin/c++ driver failing to add libstdc++ to the link args, as manually adding -lstdc++ to the end of the command doesn't change the output.

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.