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 to
pthread_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 to
pthread_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 to
pthread_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 to
pthread_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 to
lstat@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 to
pthread_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 to
pthread_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.