[Bug 1958984] Re: 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'

Chris Halse Rogers 1958984 at bugs.launchpad.net
Wed Feb 16 07:18:58 UTC 2022


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.

-- 
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to gcc-defaults in Ubuntu.
https://bugs.launchpad.net/bugs/1958984

Title:
  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'

Status in gcc-defaults package in Ubuntu:
  New

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)

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/gcc-defaults/+bug/1958984/+subscriptions




More information about the foundations-bugs mailing list