我发现当 GCC(在 GCC 4.8 和 GCC 6.4 上尝试过)real-ld
在其搜索路径中找到可执行文件时,它会默默地忽略-fuse-ld=...
选项,并使用real-ld
而不是适当的链接器。
$ echo "int main(){}" > script.c
$ ln -s /usr/bin/ld real-ld
$ gcc -fuse-ld=gold -B$PWD script.c
$ readelf --string-dump=.note.gnu.gold-version a.out
readelf: a.out: Warning: Section '.note.gnu.gold-version' was not dumped because it does not exist!
通常,没有real-ld
它会按预期工作:
$ echo "int main(){}" > script.c
$ gcc -fuse-ld=gold script.c
$ readelf --string-dump=.note.gnu.gold-version a.out
String dump of section '.note.gnu.gold-version':
[ c] GNU
[ 10] gold 1.12
GCC 的文档表明gold
将使用链接器。
collect2 的文档没有说明任何关于-fuse-ld
功能的内容......