先看一系列操作:
$ echo "A" >A $ echo "BB" >B $ ln A C $ ls -l -i total 12 2056743 -rw-rw-r-- 2 liang liang 2 2011-12-31 10:28 A 2059789 -rw-rw-r-- 1 liang liang 3 2011-12-31 10:28 B 2056743 -rw-rw-r-- 2 liang liang 2 2011-12-31 10:28 C $ cp B A $ ls -l -i total 12 2056743 -rw-rw-r-- 2 liang liang 3 2011-12-31 10:28 A 2059789 -rw-rw-r-- 1 liang liang 3 2011-12-31 10:28 B 2056743 -rw-rw-r-- 2 liang liang 3 2011-12-31 10:28 C $ cat * BB BB BB
你会发现,当我们用文件B覆盖文件A的时候,文件C的内容也变了。
这种情况是在编译binutils时使用--enable-gold=default这个configure选项时出现的。使用这个选项,我们会得到三个linker,文件名分别为ld, ld.bfd和ld.gold,其中ld是ld.gold的硬链接,即如上例中的A和C。在这种情况下,如果想尝试BFD ld,那么不能直接使用ld.bfd覆盖ld,否则就会出现上面的情况,即ld.gold实际上也被改变为ld.bfd,而真正的ld.gold就没有了。
这种情况如果不是特别留意,很难发现,会误以为只要用ld.gold覆盖ld,就可以恢复使用Gold作为linker,其实还是在使用BFD ld。