gpt4 book ai didi

gcc - ld 失败,因为 libselinux 未定义对 gettid@GLIBC_2.30 的引用

转载 作者:行者123 更新时间:2023-12-05 06:59:50 33 4
gpt4 key购买 nike

我正在尝试从源代码构建 glibc 2.24。主机操作系统为 WSL Ubuntu 20.04,编译器为 gcc 9。

ld 实用程序在尝试链接 glibc 的 nss 模块时失败:

/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/libselinux.so: undefined reference to `gettid@GLIBC_2.30'
collect2: error: ld returned 1 exit status

似乎 libselinux.so 包含一个 undefined symbol gettid@GLIBC_2.30。我检查了 libselinux.so 并发现它确实如此:

$ readelf -Ws /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/libselinux.so | grep gettid
13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gettid@GLIBC_2.30 (4)

由于libselinux.so是由ld加载的,我进一步检查了ld的依赖:

$ ldd /usr/bin/ld
linux-vdso.so.1 (0x00007fffd365c000)
libbfd-2.34-system.so => /lib/x86_64-linux-gnu/libbfd-2.34-system.so (0x00007f144c410000)
libctf.so.0 => /lib/x86_64-linux-gnu/libctf.so.0 (0x00007f144c3f0000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f144c3e0000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f144c1e0000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f144c1c0000)
/lib64/ld-linux-x86-64.so.2 (0x00007f144c713000)

我发现 libc.so.6 会在加载 ld 时加载。但是当我进一步检查libc.so.6中定义的符号时,我发现gettid@GLIBC_2.30已经被定义了:

$ readelf -Ws /lib/x86_64-linux-gnu/libc.so.6 | grep gettid
1329: 00000000001231c0 12 FUNC WEAK DEFAULT 16 gettid@@GLIBC_2.30

我真的很困惑。为什么会出现undefined reference问题呢?又该如何解决?

最佳答案

您发现 ld 加载了 libc.so.6 的事实意味着 ld 将使用该库中的函数,但并不意味着它将链接到它。

如果你想让 ld 再次链接这个库,你必须添加 -Lpath-lc。但通常情况下,如果您使用 gcc 链接,它会自动链接到 libc。

关于gcc - ld 失败,因为 libselinux 未定义对 gettid@GLIBC_2.30 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64310608/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com