先看一系列操作:
$ 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。