0

I am trying to compile glibc 2.31 on Ubuntu 22.04 LTS.

I followed a this answer as a template, which was incredibly helpful.

My issue is that there are undefined references when I run make:

...

make[2]: Entering directory '/home/user/glibc/glibc-2.31/support' gcc -Wl,-rpath-link=/home/user/glibc/glibc-2.31-build:/home/user/glibc/glibc-2.31-build/math:/home/user/glibc/glibc-2.31-build/elf:/home/user/glibc/glibc-2.31-build/dlfcn:/home/user/glibc/glibc-2.31-build/nss:/home/user/glibc/glibc-2.31-build/nis:/home/user/glibc/glibc-2.31-build/rt:/home/user/glibc/glibc-2.31-build/resolv:/home/user/glibc/glibc-2.31-build/mathvec:/home/user/glibc/glibc-2.31-build/support:/home/user/glibc/glibc-2.31-build/crypt:/home/user/glibc/glibc-2.31-build/nptl -pie -Wl,-O1 -nostdlib -nostartfiles -o /home/user/glibc/glibc-2.31-build/support/test-container -Wl,-z,combreloc -Wl,-z,relro -Wl,--hash-style=both /home/user/glibc/glibc-2.31-build/csu/Scrt1.o /home/user/glibc/glibc-2.31-build/csu/crti.o gcc --print-file-name=crtbeginS.o /home/user/glibc/glibc-2.31-build/support/test-container.o /home/user/glibc/glibc-2.31-build/support/libsupport_nonshared.a -Wl,-dynamic-linker=/home/user/glibc/glibc-2.31-install/lib/ld-linux-x86-64.so.2 /home/user/glibc/glibc-2.31-build/libc.so.6 /home/user/glibc/glibc-2.31-build/libc_nonshared.a -Wl,--as-needed /home/user/glibc/glibc-2.31-build/elf/ld.so -Wl,--no-as-needed -lgcc gcc --print-file-name=crtendS.o /home/user/glibc/glibc-2.31-build/csu/crtn.o gcc -Wl,-rpath-link=/home/user/glibc/glibc-2.31-build:/home/user/glibc/glibc-2.31-build/math:/home/user/glibc/glibc-2.31-build/elf:/home/user/glibc/glibc-2.31-build/dlfcn:/home/user/glibc/glibc-2.31-build/nss:/home/user/glibc/glibc-2.31-build/nis:/home/user/glibc/glibc-2.31-build/rt:/home/user/glibc/glibc-2.31-build/resolv:/home/user/glibc/glibc-2.31-build/mathvec:/home/user/glibc/glibc-2.31-build/support:/home/user/glibc/glibc-2.31-build/crypt:/home/user/glibc/glibc-2.31-build/nptl -pie -Wl,-O1 -nostdlib -nostartfiles -o /home/user/glibc/glibc-2.31-build/support/shell-container -Wl,-z,combreloc -Wl,-z,relro -Wl,--hash-style=both /home/user/glibc/glibc-2.31-build/csu/Scrt1.o /home/user/glibc/glibc-2.31-build/csu/crti.o gcc --print-file-name=crtbeginS.o /home/user/glibc/glibc-2.31-build/support/shell-container.o /home/user/glibc/glibc-2.31-build/support/libsupport_nonshared.a -Wl,-dynamic-linker=/home/user/glibc/glibc-2.31-install/lib/ld-linux-x86-64.so.2 /home/user/glibc/glibc-2.31-build/libc.so.6 /home/user/glibc/glibc-2.31-build/libc_nonshared.a -Wl,--as-needed /home/user/glibc/glibc-2.31-build/elf/ld.so -Wl,--no-as-needed -lgcc gcc --print-file-name=crtendS.o /home/user/glibc/glibc-2.31-build/csu/crtn.o gcc -Wl,-rpath-link=/home/user/glibc/glibc-2.31-build:/home/user/glibc/glibc-2.31-build/math:/home/user/glibc/glibc-2.31-build/elf:/home/user/glibc/glibc-2.31-build/dlfcn:/home/user/glibc/glibc-2.31-build/nss:/home/user/glibc/glibc-2.31-build/nis:/home/user/glibc/glibc-2.31-build/rt:/home/user/glibc/glibc-2.31-build/resolv:/home/user/glibc/glibc-2.31-build/mathvec:/home/user/glibc/glibc-2.31-build/support:/home/user/glibc/glibc-2.31-build/crypt:/home/user/glibc/glibc-2.31-build/nptl -pie -Wl,-O1 -nostdlib -nostartfiles -o /home/user/glibc/glibc-2.31-build/support/echo-container -Wl,-z,combreloc -Wl,-z,relro -Wl,--hash-style=both /home/user/glibc/glibc-2.31-build/csu/Scrt1.o /home/user/glibc/glibc-2.31-build/csu/crti.o gcc --print-file-name=crtbeginS.o /home/user/glibc/glibc-2.31-build/support/echo-container.o /home/user/glibc/glibc-2.31-build/support/libsupport_nonshared.a -Wl,-dynamic-linker=/home/user/glibc/glibc-2.31-install/lib/ld-linux-x86-64.so.2 /home/user/glibc/glibc-2.31-build/libc.so.6 /home/user/glibc/glibc-2.31-build/libc_nonshared.a -Wl,--as-needed /home/user/glibc/glibc-2.31-build/elf/ld.so -Wl,--no-as-needed -lgcc gcc --print-file-name=crtendS.o /home/user/glibc/glibc-2.31-build/csu/crtn.o gcc -Wl,-rpath-link=/home/user/glibc/glibc-2.31-build:/home/user/glibc/glibc-2.31-build/math:/home/user/glibc/glibc-2.31-build/elf:/home/user/glibc/glibc-2.31-build/dlfcn:/home/user/glibc/glibc-2.31-build/nss:/home/user/glibc/glibc-2.31-build/nis:/home/user/glibc/glibc-2.31-build/rt:/home/user/glibc/glibc-2.31-build/resolv:/home/user/glibc/glibc-2.31-build/mathvec:/home/user/glibc/glibc-2.31-build/support:/home/user/glibc/glibc-2.31-build/crypt:/home/user/glibc/glibc-2.31-build/nptl -pie -Wl,-O1 -nostdlib -nostartfiles -o /home/user/glibc/glibc-2.31-build/support/true-container -Wl,-z,combreloc -Wl,-z,relro -Wl,--hash-style=both /home/user/glibc/glibc-2.31-build/csu/Scrt1.o /home/user/glibc/glibc-2.31-build/csu/crti.o gcc --print-file-name=crtbeginS.o /home/user/glibc/glibc-2.31-build/support/true-container.o /home/user/glibc/glibc-2.31-build/support/libsupport_nonshared.a -Wl,-dynamic-linker=/home/user/glibc/glibc-2.31-install/lib/ld-linux-x86-64.so.2 /home/user/glibc/glibc-2.31-build/libc.so.6 /home/user/glibc/glibc-2.31-build/libc_nonshared.a -Wl,--as-needed /home/user/glibc/glibc-2.31-build/elf/ld.so -Wl,--no-as-needed -lgcc gcc --print-file-name=crtendS.o /home/user/glibc/glibc-2.31-build/csu/crtn.o gcc -Wl,-rpath-link=/home/user/glibc/glibc-2.31-build:/home/user/glibc/glibc-2.31-build/math:/home/user/glibc/glibc-2.31-build/elf:/home/user/glibc/glibc-2.31-build/dlfcn:/home/user/glibc/glibc-2.31-build/nss:/home/user/glibc/glibc-2.31-build/nis:/home/user/glibc/glibc-2.31-build/rt:/home/user/glibc/glibc-2.31-build/resolv:/home/user/glibc/glibc-2.31-build/mathvec:/home/user/glibc/glibc-2.31-build/support:/home/user/glibc/glibc-2.31-build/crypt:/home/user/glibc/glibc-2.31-build/nptl -pie -Wl,-O1 -nostdlib -nostartfiles -o /home/user/glibc/glibc-2.31-build/support/links-dso-program -Wl,-z,combreloc -Wl,-z,relro -Wl,--hash-style=both /home/user/glibc/glibc-2.31-build/csu/Scrt1.o /home/user/glibc/glibc-2.31-build/csu/crti.o gcc --print-file-name=crtbeginS.o /home/user/glibc/glibc-2.31-build/support/links-dso-program.o -lstdc++ -lgcc -lgcc_s -Wl,-dynamic-linker=/home/user/glibc/glibc-2.31-install/lib/ld-linux-x86-64.so.2 /home/user/glibc/glibc-2.31-build/libc.so.6 /home/user/glibc/glibc-2.31-build/libc_nonshared.a -Wl,--as-needed /home/user/glibc/glibc-2.31-build/elf/ld.so -Wl,--no-as-needed -lgcc gcc --print-file-name=crtendS.o /home/user/glibc/glibc-2.31-build/csu/crtn.o /home/user/binutils/binutils-2.32-install/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/8/libstdc++.so: undefined reference to fstat64@GLIBC_2.33' /home/user/binutils/binutils-2.32-install/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/8/libstdc++.so: undefined reference topthread_key_create@GLIBC_2.34' /home/user/binutils/binutils-2.32-install/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/8/libstdc++.so: undefined reference to pthread_rwlock_unlock@GLIBC_2.34' /home/user/binutils/binutils-2.32-install/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/8/libstdc++.so: undefined reference topthread_detach@GLIBC_2.34' /home/user/binutils/binutils-2.32-install/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/8/libstdc++.so: undefined reference to pthread_setspecific@GLIBC_2.34' /home/user/binutils/binutils-2.32-install/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/libgcc_s.so.1: undefined reference to_dl_find_object@GLIBC_2.35' /home/user/binutils/binutils-2.32-install/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/8/libstdc++.so: undefined reference to __libc_single_threaded@GLIBC_2.32' /home/user/binutils/binutils-2.32-install/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/8/libstdc++.so: undefined reference topthread_join@GLIBC_2.34' /home/user/binutils/binutils-2.32-install/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/8/libstdc++.so: undefined reference to pthread_rwlock_wrlock@GLIBC_2.34' /home/user/binutils/binutils-2.32-install/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/8/libstdc++.so: undefined reference topthread_getspecific@GLIBC_2.34' /home/user/binutils/binutils-2.32-install/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/8/libstdc++.so: undefined reference to pthread_key_delete@GLIBC_2.34' /home/user/binutils/binutils-2.32-install/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/8/libstdc++.so: undefined reference tolstat@GLIBC_2.33' /home/user/binutils/binutils-2.32-install/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/8/libstdc++.so: undefined reference to stat@GLIBC_2.33' /home/user/binutils/binutils-2.32-install/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/8/libstdc++.so: undefined reference topthread_once@GLIBC_2.34' /home/user/binutils/binutils-2.32-install/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/8/libstdc++.so: undefined reference to pthread_rwlock_rdlock@GLIBC_2.34' /home/user/binutils/binutils-2.32-install/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/8/libstdc++.so: undefined reference topthread_create@GLIBC_2.34' collect2: error: ld returned 1 exit status make[2]: *** [../Rules:215: /home/user/glibc/glibc-2.31-build/support/links-dso-program] Error 1 make[2]: Leaving directory '/home/user/glibc/glibc-2.31/support' make[1]: *** [Makefile:470: support/others] Error 2 make[1]: Leaving directory '/home/user/glibc/glibc-2.31' make: *** [Makefile:9: all] Error 2

Originally, I tried with:

gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
GNU ld (GNU Binutils for Ubuntu) 2.38

But, after failure I tried (and failed the same way) with:

gcc (Ubuntu 12.3.0-1ubuntu1~22.04) 12.3.0
GNU ld (GNU Binutils for Ubuntu) 2.38

This procedure fails with glibc 2.31 and 2.32, but works for glibc 2.35.

Lastly, I actually read the INSTALL document, and I see that:

* GCC 6.2 or newer
 GCC 6.2 or higher is required.  In general it is recommended to use
 the newest version of the compiler that is known to work for
 building the GNU C Library, as newer compilers usually produce
 better code.  As of release time, GCC 9.2.1 is the newest compiler
 verified to work to build the GNU C Library.

 For multi-arch support it is recommended to use a GCC which has
 been built with support for GNU indirect functions.  This ensures
 that correct debugging information is generated for functions
 selected by IFUNC resolvers.  This support can either be enabled by
 configuring GCC with '--enable-gnu-indirect-function', or by
 enabling it by default by setting 'default_gnu_indirect_function'
 variable for a particular architecture in the GCC source file
 'gcc/config.gcc'.

 You can use whatever compiler you like to compile programs that use
 the GNU C Library.

 Check the FAQ for any special compiler issues on particular
 platforms.

  • GNU 'binutils' 2.25 or later

    You must use GNU 'binutils' (as and ld) to build the GNU C Library. No other assembler or linker has the necessary functionality at the moment. As of release time, GNU 'binutils' 2.32 is the newest verified to work to build the GNU C Library.

So, I built binutils 2.32 following the excellent advice of the accepted answer to this question.

Then, I put that version of binutils at the top of my PATH variable, yielding the following results:

gcc --version
gcc (Ubuntu 8.4.0-3ubuntu2) 8.4.0

ld --version GNU ld (GNU Binutils) 2.32

as --version GNU assembler (GNU Binutils) 2.32

And still, I get the same errors for undefined references... I am lost.

Any help would be appreciated. Thanks in advance.

Arizen
  • 1
  • 1

0 Answers0