distcc原始碼研究三

2021-06-03 14:08:02 字數 965 閱讀 4484

繼續研究distcc。今天我在思考這樣乙個問題:分布式編譯系統本身並不是編譯器,它本質是乙個編譯請求的發起者和執行者,也就是說,它必須建立編譯程序,而要建立編譯程序,它需要找到編譯器,具體到distcc,就是gcc編譯器。就是分布式編譯的客戶端或者轉入乙個編譯器引數,或者它自己去找編譯器。

今天通過閱讀**,證實了我的猜測。distcc客戶端程式是乙個控制台程式,它帶有一些命令列引數,如—help用於顯示幫助資訊,--version用於顯示版本資訊等等。今天我們拋開這些細節,遵循這樣研究思路:看看distcc如何gcc編譯器,又是如何建立編譯程序的。

很快,我們找到這樣乙個函式:dcc_find_compiler。看樣子這個函式是用來實現尋找編譯器的。讓我們看看事實是不是這樣的。

intdcc_find_compiler(char **argv, char ***out_argv)

/* change "distcc cc -cfoo.c" -> "cc -c foo.c" */

free((*out_argv)[0]);

(*out_argv)[0] =strdup("cc");

if ((*out_argv)[0] == null)

return 0;

} else

}

我們看到這個函式確實是查詢編譯器的。我們也看到了distcc實際上支援兩種編譯器的,一種是cc(貌似是sun推出的c++編譯器),另一種是gcc。找到的編譯器及其編譯檔案引數儲存在out_argv變數中。

既然我們找到編譯器,那麼下一步應該是建立編譯程序。在main函式中在呼叫完dcc_find_compiler函式接著呼叫dcc_trim_path函式,貌似是檢查系統有安裝gcc或cc,反正不是建立編譯程序的,暫且忽略。繼續往下看。

跳過一些次要的函式,我終於找到乙個重要的函式:dcc_build_somewhere_timed。在以後的歲月裡我們將重點剖析該函式。這篇就到這裡吧。

原 distcc原始碼研究四

在 distcc原始碼研究三 中我提到dcc build somewhere timed函式,認為是在這個函式裡建立編譯程序中。那麼我們就看看這個函式是如何建立編譯程序的。dcc build somewhere timed函式裡面主要呼叫dcc build somewhere函式。下面我們仔細剖析下...

cita 原始碼研究

適用環境 vim youcompleteme使用 github 源,不能使用 ustc 源 git clone depth 1 recusive所有 cargo.toml 中的庫版本號全部改為精確的細版本號,不能是粗略的大版本號 所有 cargo.toml 中的非官方託管庫,均改為 形式 第 2 3...

jQuery原始碼研究 怎麼看原始碼

這幾天有想看原始碼的想法,於是就開始了原始碼的研究,經過幾天的摸索發現看原始碼還是有點技巧在裡面的,想著把這些東東寫下來作為乙個小總結。在乙個多月前我對vue原始碼進行了一次研究,那時看原始碼的方式基本上是從上往下看,結果看著看著就看不下去了,後來找了乙個很老的版本看,但看的還是不太懂,於是想著乾脆...