Некоторые пути (например, к cc1
) скомпилированы в. Другие (например, as
) используют обычный поиск в $ PATH.Это может варьироваться в зависимости от параметров, с которыми сконфигурирован GCC.
Вы можете довольно легко определить, запустив strace
и указав 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", …
Это вызовв 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
Это ищет as
в $ PATH.Вы можете сказать, потому что он пытается каждую позицию в $ PATH по порядку.
Я пропустил много выводов strace - даже с использованием только stat и exec, длиной в несколько страниц.
Running gcc -v
покажет вам некоторые скомпилированные пути (как часть строки конфигурации).