gcc如何找到,ld和其他binutils可执行文件?

Mic*_*hos 15 gcc binutils

他们的位置是硬编码为gcc代码还是gcc只是调用as,我们必须as在PATH变量中有位置?

在后一种情况下,我们如何创建两个完全独立的gcc工具链?我的意思是,我们怎样才能使gcc-A调用as-Agcc-B调用as-B,如果as-Aas-B都称为as

der*_*ert 12

一些路径(例如,to cc1)被编译.其他(例如as)在$ PATH中使用正常查找.这取决于GCC配置的选项.

你可以通过运行strace和grepping来轻松地说出来exec|stat.

$ strace -f gcc foo.c -o foo |& grep exec
?
[pid 24943] execve("/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.6.1/cc1", …
Run Code Online (Sandbox Code Playgroud)

这是通过编译路径调用cc1,正如您可以从缺乏查找中看到的那样.它也不在$ PATH中.

[pid 24944] execve("/home/anthony/bin/as", ["as", "--64", "-o", "/tmp/ccCIrcGi.o", "/tmp/ccbw3PkL.s"], [/* 51 vars */]) = -1 ENOENT (No such file or directory)
[pid 24944] execve("/usr/local/bin/as", ["as", "--64", "-o", "/tmp/ccCIrcGi.o", "/tmp/ccbw3PkL.s"], [/* 51 vars */]) = -1 ENOENT (No such file or directory)
[pid 24944] execve("/usr/bin/as", ["as", "--64", "-o", "/tmp/ccCIrcGi.o", "/tmp/ccbw3PkL.s"], [/* 51 vars */]) = 0
Run Code Online (Sandbox Code Playgroud)

那是在寻找as$ PATH.你可以说,因为它按顺序尝试$ PATH中的每个位置.

我省略了很多strace输出 - 即使只有stat和exec,它的几页长.

运行gcc -v将显示一些编译路径(作为配置行的一部分).

  • @MichalisVichos:可能配置标志`--with-as=/my/path/as` 可以做到这一点。出现配置文档可在 http://gcc.gnu.org/install/configure.html 获得(当然也可以使用 `./configure --help`) (2认同)