是他們的位置硬編碼到GCC的代碼或不GCC只是調用as
,我們必須在我們的PATH變量as
位置?gcc如何查找,ld和其他binutils可執行文件?
而在後一種情況下,我們如何可以創建兩個完全獨立的GCC工具鏈?我的意思是,如果as-A
和as-B
都被稱爲as
,我們如何使gcc-A
調用as-A
和gcc-B
調用as-B
?
是他們的位置硬編碼到GCC的代碼或不GCC只是調用as
,我們必須在我們的PATH變量as
位置?gcc如何查找,ld和其他binutils可執行文件?
而在後一種情況下,我們如何可以創建兩個完全獨立的GCC工具鏈?我的意思是,如果as-A
和as-B
都被稱爲as
,我們如何使gcc-A
調用as-A
和gcc-B
調用as-B
?
其中一些路徑(例如到cc1
)被編譯。其他(例如,as
)在$ PATH中使用正常查找。這可以根據GCC配置的選項而變化。
通過strace
運行和grep 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
這是在$ PATH尋找as
。你可以告訴它,因爲它按順序試圖在$ PATH中的每個 位置。
我省略了很多strace的輸出,即使只有統計和exec,其 幾頁長。
運行gcc -v
會告訴你一些編譯時的路徑(configure行作爲部分)。
有對於一個特設的選項:-B *前綴*,引用文檔GCC:
對於要運行的每個子程序,編譯器驅動程序首先使用-B前綴,如果有的話。如果 該名稱沒有找到,或者如果沒有指定-B,驅動程序嘗試兩個標準前綴, 這是/ usr/lib中/海合會/和/ usr/local/lib目錄/ GCC /。 [...]
您還可以查詢與海灣合作委員會的搜索路徑:
gcc -print-search-dirs | grep -E '^programs' | tr ':' '\n'
輸出樣本:
programs
=/usr/lib/gcc/x86_64-linux-gnu/6/
/usr/lib/gcc/x86_64-linux-gnu/6/
/usr/lib/gcc/x86_64-linux-gnu/
/usr/lib/gcc/x86_64-linux-gnu/6/
/usr/lib/gcc/x86_64-linux-gnu/
/usr/lib/gcc/x86_64-linux-gnu/6/../../../../x86_64-linux-gnu/bin/x86_64-linux-gnu/6/
/usr/lib/gcc/x86_64-linux-gnu/6/../../../../x86_64-linux-gnu/bin/x86_64-linux-gnu/
/usr/lib/gcc/x86_64-linux-gnu/6/../../../../x86_64-linux-gnu/bin/
與特定節目有:
gcc -print-prog-name=cc1
樣本輸出:
/usr/lib/gcc/x86_64-linux-gnu/6/cc1
非常感謝你。你知道哪些配置選項定義了最終的行爲嗎?有沒有辦法限制gcc只使用/ my/path/as和my/path/ld? –
@MichalisVichos:可能配置標誌'--with-as =/my/path/as'會這樣做。出現configure文檔可以在http://gcc.gnu.org/install/configure.html找到(當然也可以用'./configure --help') – derobert