首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由于libselinux未定义对gettid@GLIBC_2.30的引用,ld失败

由于libselinux未定义对gettid@GLIBC_2.30的引用,ld失败
EN

Stack Overflow用户
提问于 2020-10-12 09:35:54
回答 1查看 639关注 0票数 2

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

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

代码语言:javascript
复制
/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,发现它是这样的:

代码语言:javascript
复制
$ 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的依赖关系

代码语言:javascript
复制
$ 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)

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

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

我真的很困惑。为什么会出现未定义的引用问题?我该如何解决它呢?

EN

回答 1

Stack Overflow用户

发布于 2020-11-06 18:56:26

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

如果您希望ld链接到该库,则必须添加-Lpath-lc。但通常情况下,如果你链接到gcc,它会自动链接到libc。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64310608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档