提问人:Lancern 提问时间:10/12/2020 更新时间:6/13/2023 访问量:1579
ld 失败,因为 libselinux 未定义对 gettid@GLIBC_2.30 的引用
ld failed because libselinux has undefined reference to gettid@GLIBC_2.30
问:
我正在尝试从源代码构建 glibc 2.24。主机操作系统是 WSL Ubuntu 20.04,编译器是 gcc 9。
尝试链接 glibc 模块时,实用程序失败:ld
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
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
我真的很困惑。为什么会出现未定义的引用问题?我应该如何解决它?
答:
0赞
yflelion
11/6/2020
#1
您发现 ld 加载的 libc.so.6 这一事实意味着 ld 将使用该库中的函数,但并不意味着它会链接到它。
如果你想让 ld 链接到这个库,你必须添加 和 。但通常情况下,如果你与 gcc 链接,它会自动链接到 libc。-Lpath
-lc
0赞
Y.Z
6/13/2023
#2
还有另外一个:@
jonasson@linux:/usr/lib/x86_64-linux-gnu$ readelf -Ws /lib/x86_64-linux-gnu/libc.so.6 | grep gettid
1332: 0000000000120060 12 FUNC WEAK DEFAULT 15 gettid@@GLIBC_2.30
jonasson@linux:/usr/lib/x86_64-linux-gnu$ readelf -Ws /lib/x86_64-linux-gnu/libselinux.so.1 | grep gettid
13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gettid@GLIBC_2.30 (4)`
0赞
Absoler
11/27/2023
#3
我遇到了同样的问题,我发现这个补丁似乎导致了这个问题,他们添加了一个包装器gettid
评论