c++ - 运行 'make check' GLIBC 时出现链接问题

标签 c++ c linux ld glibc

我目前正在尝试在 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(下面引用的目录为 $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

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

Inconsistency detected by ld.so: get-dynamic-info.h: 147:
elf_get_dynamic_info: Assertion `info[DT_RPATH] == NULL' failed!

作为健全性检查,我在区域设置输出的可执行文件之一上运行 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 $? false false \ $HOME/lib/glibc_build/csu/test-as-const-ucontext_i.test-result Inconsistency detected by ld.so: get-dynamic-info.h: 147: elf_get_dynamic_info: Assertion `info[DT_RPATH] == NULL' failed!

最佳答案

As a sanity check, I run ldd on one of the locale outputted executables which gives:

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 输出:它会对你撒谎,而且大多毫无意义。

关于c++ - 运行 'make check' GLIBC 时出现链接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59984296/

相关文章:

c++ - 在容器中查找派生对象

c - 为什么我无法将 unsigned int 指针转换为 unsigned int?

linux - clone() 系统调用是否最终依赖于 fork 功能?

c++ - 构造函数中的计数器

c++ - 将 std::bind 与成员函数一起使用,是否为该参数使用对象指针?

c++ - MinGW C++ : Reading a file with non-ascii file name

C程序从数组中打印出LCD数字

c - 如何在 C 中处理一个 float 以写入 4 个单独的字节?

c - 我在哪里可以获得 `struct file* file_open(const char* path, int flags, int rights)` 的手册页

linux - 两台服务器之间的远程 rsync 管道损坏