Algunas de las rutas (por ejemplo, a cc1
) están compiladas en. Otros (por ejemplo, as
) usan la búsqueda normal en $ PATH. Esto puede variar según las opciones con las que GCC esté configurado.
Puede ver bastante fácilmente ejecutando con strace
, y grepping para 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", …
Esa es una llamada a CC1 por un camino en el programa compilado, como se puede ver en la falta de en busca de ella. Tampoco está en $ 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
Eso está buscando as
en $ PATH. Puede ver porque está probando cada ubicación en $ PATH en orden.
He omitido una gran producción, incluso con solo stat y exec, es de varias páginas.
Al ejecutar gcc -v
, se mostrarán algunas de las rutas de acceso compiladas (como parte de la línea de configuración).
Muchas gracias. ¿Sabes qué opciones de configuración definen el comportamiento final? ¿Hay alguna forma de limitar el uso de gcc gcc/my/path/as y my/path/ld? –
@MichalisVichos: Probablemente el indicador de configuración '--with-as =/my/path/as' haría eso. Parece que la documentación de configuración está disponible en http://gcc.gnu.org/install/configure.html (o, por supuesto, con './configure --help') – derobert