【问题标题】:Why does ld need /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 while its default dynamic linker is /lib64/ld-linux-x86-64.so.2?为什么 ld 需要 /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 而它的默认动态链接器是 /lib64/ld-linux-x86-64.so.2?
【发布时间】:2021-07-09 05:24:43
【问题描述】:

在 x86-64 目标 Debian 中,大多数程序都通过 /lib64/ld-linux-x86-64.so.2 链接到共享对象。而且/lib/x86_64-linux-gnu/里也有一个,所以按我的想法删了 这是不必要的:

rm /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2

然后测试:

gcc test.c

显示如下:

/usr/bin/ld: cannot find /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 inside /
collect2: error: ld returned 1 exit status

那么,为什么ld在链接时需要找到/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2,而默认的动态链接器是/lib64/ld-linux-x86-64.so.2

【问题讨论】:

    标签: linux gcc linker


    【解决方案1】:

    /lib64/ 是 /usr/lib64/ 的符号链接。

    cd /lib64/ && ls -l ld-linux-x86-64.so.2 
    lrwxrwxrwx 1 root .. ld-linux-x86-64.so.2 -> /lib/x86_64-linux-gnu/ld-2.28.so
    
    cd /usr/lib/x86_64-linux-gnu/ 
    ls -l ld-linux-x86-64.so.2 
    lrwxrwxrwx 1 root .. ld-linux-x86-64.so.2 -> ld-2.28.so
    

    链接器ld-2.28.so的主链接是/usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2:不要更改它。 (/lib64/ 和 /usr/lib64/ 中的链接是出于与某些软件的兼容性原因。)

    【讨论】:

      猜你喜欢
      • 2010-12-18
      • 1970-01-01
      • 2023-02-20
      • 1970-01-01
      • 2022-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多