일부 경로 (예 : cc1
)가 컴파일되고 기타 (예 : as
)는 $ PATH에서 정상 조회를 사용합니다. 이는 GCC가 구성된 옵션에 따라 다를 수 있습니다.
strace
으로 실행하고 exec|stat
을 사용하여 그루핑을하면 쉽게 알 수 있습니다. 당신이 찾고의 부족에서 볼 수 있듯이, 컴파일 된 경로로 CC1를 호출입니다
$ 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", …
. 그것도 $ 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
이는 $ PATH에서 as
을 찾고 있습니다. 각 위치를 $ PATH에 순서대로 시도했기 때문에 알 수 있습니다.
stat와 exec만으로도 많은 strace 출력을 생략했습니다. 여러 페이지가 길어졌습니다.
gcc -v
을 실행하면 (configure 행의 일부로) 컴파일 된 경로 중 일부가 표시됩니다.
대단히 감사합니다. 어떤 구성 옵션이 최종 동작을 정의하는지 알고 있습니까? gcc가/my/path/as와 my/path/ld만을 사용하도록 제한 할 수있는 방법이 있습니까? –
@MichalisVichos : 아마도 configure 플래그'--with-as =/my/path/as'가 그렇게 할 것입니다. configure 설명서가 나타나면 http://gcc.gnu.org/install/configure.html에서 (또는 물론 ./configure --help'와 함께) 사용할 수 있습니다. – derobert