为什么 ld 需要 /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 而它的默认动态链接器是 /lib64/ld-linux-x86-64.so.2?

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?

在 x86-64 目标 Debian 中,大多数程序都是 link 针对具有 /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

那么,当 linking 时,为什么 ld 需要找到 /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 而默认动态 linker 是 /lib64/ld-linux-x86-64.so.2

/lib64/ 是 link 到 /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

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