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.ogcc -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.ogcc -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.ogcc -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.ogcc -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 statusmake[2]: *** [../Rules:215: /home/user/glibc/glibc-2.31-build/support/links-dso-program] Error 1make[2]: Leaving directory '/home/user/glibc/glibc-2.31/support'make[1]: *** [Makefile:470: support/others] Error 2make[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.0GNU 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.0GNU 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 --versiongcc (Ubuntu 8.4.0-3ubuntu2) 8.4.0ld --versionGNU ld (GNU Binutils) 2.32as --versionGNU 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.