'make check' GLIBC 运行时的链接问题

Linking Issues when running 'make check' GLIBC

本文关键字:链接 问题 check make GLIBC 运行时      更新时间:2023-10-16

我目前正在尝试在 linux 3.10.0-1062.9.1.el7.x86_64 系统上编译 glibc-2.30,因为它当前运行的是 2.17。
编译环境包括通过 spack 加载的以下内容:-binutils-2.33.1%gcc@9.2-gcc@9.2 +piclibs binutils=binutils-2.33-gmake@4.2.1-libcap-2.25-linux-headers-4.9.10


(dir 在下面引用为 $kern_headers(
-libgd-2.2.4

上述所有必需的依赖项也随 spack 一起加载和安装。

我已经将 glibc 克隆到 $HOME/lib/glibc 并签出了 glibc-2.30 存储库。
从 $HOME/lib/glibc_build,我运行以下配置以确保正确使用上述软件包:

../glibc/configure --prefix=$HOME/lib/gnu/glibc_v2 CC="$gcc_bin/gcc -m64" --with-headers=$kern_headers CFLAGS=" -O3" CXXFLAGS=" -O3 -std=c++17" --with-binutils=$binutils_base/bin

其次:

make -j40

编译没有问题。 但是,当我跑步时

make check

我最终收到以下错误的多个实例:

ld.so 检测到不一致:get-dynamic-info.h: 147:elf_get_dynamic_info:
断言"info[DT_RPATH] == NULL"失败!

作为健全性检查,我在其中一个区域设置输出的可执行文件上运行ldd,它提供:

linux-vdso.so.1 =>(0x00007fffc4123000(
libc.so.6 =>/lib64/libc.so.6 (0x00002b9080d40000(
$HOME$/lib/gnu/glibc_v2/lib/ld-linux-x86-64.so.2 =>/lib64/ld-linux-x86-64.so.2 (0x00002b9080b1c000(

这对我来说毫无意义,因为它仍在使用旧的链接器与来自 binutils 的链接器。 此外,它指向一个空目录,因为我在此阶段尚未完成make install将其安装到 --prefix 中列出的目录中。

无论如何,我都尝试运行make install,但是如果我尝试使用 rpath 和动态链接器编译设置使用 --prefix 目录树中的 libc.so 编译测试程序,我会收到完全相同的断言错误消息。

编译命令失败的示例:

env GCONV_PATH=$HOME/lib/glibc_build/iconvdata \ LOCPATH=$HOME/lib/glibc_build/localedata LC_ALL=C \$HOME/lib/glibc_build/elf/ld-linux-x86-64.so.2 --library-path \$HOME/lib/glibc_build:$HOME/lib/glibc_build/math:\$HOME/lib/glibc_build/elf:$HOME/lib/glibc_build/dlfcn:\$HOME/lib/glibc_build/nss:$HOME/lib/glibc_build/nis:\$HOME/lib/glibc_build/rt:$HOME/lib/glibc_build/




resolv:\$HOME/
lib/glibc_build/mathvec:$HOME/lib/glibc_build/support:\$HOME/lib/glibc_build/crypt:$HOME/lib/glibc_build/nptl \$HOME/lib/glibc_build/csu/test-as-const-ucontext_i \

$HOME/lib/glibc_build/csu/test-as-const-ucontext_i.out; \ ../scripts/evaluate-test.sh csu/test-as-const-ucontext_i $?假 假\ $HOME/lib/glibc_build/csu/test-as-const-ucontext_i.test-result 检测到不一致 ld.so: get-dynamic-info.h: 147: elf_get_dynamic_info:断言"信息[DT_RPATH] == 空"失败!

作为健全性检查,我在其中一个区域设置输出的可执行文件上运行ldd,它给出:

libc.so.6 => /lib64/libc.so.6 (0x00002b9080d40000)
$HOME$/lib/gnu/glibc_v2/lib/ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2 (0x00002b9080b1c000)

不要注意ldd输出:它会欺骗你,而且大多毫无意义。