日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

distcc源码研究三

發布時間:2025/3/19 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 distcc源码研究三 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作者:朱金燦

來源:http://blog.csdn.net/clever101

?

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

?

?????? 今天通過閱讀代碼,證實了我的猜測。Distcc客戶端程序是一個控制臺程序,它帶有一些命令行參數,如—help用于顯示幫助信息,--version用于顯示版本信息等等。今天我們拋開這些細節,遵循這樣研究思路:看看distcc如何gcc編譯器,又是如何創建編譯進程的。

?

?????? 很快,我們找到這樣一個函數:dcc_find_compiler??礃幼舆@個函數是用來實現尋找編譯器的。讓我們看看事實是不是這樣的。

intdcc_find_compiler(char **argv, char ***out_argv){int ret;if (argv[1][0] == '-'|| dcc_is_source(argv[1])|| dcc_is_object(argv[1])) {if ((ret = dcc_copy_argv(argv,out_argv, 0)) != 0) {return ret;}/* change "distcc cc -cfoo.c" -> "cc -c foo.c" */free((*out_argv)[0]);(*out_argv)[0] =strdup("cc");if ((*out_argv)[0] == NULL) {return EXIT_OUT_OF_MEMORY;}return 0;} else {/* skip "distcc", point to"gcc -c foo.c" */return dcc_copy_argv(argv + 1,out_argv, 0);}}

??????? 我們看到這個函數確實是查找編譯器的。我們也看到了distcc實際上支持兩種編譯器的,一種是cc(貌似是SUN推出的C++編譯器),另一種是gcc。找到的編譯器及其編譯文件參數保存在out_argv變量中。

?

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

?

?????? 跳過一些次要的函數,我終于找到一個重要的函數:dcc_build_somewhere_timed。在以后的歲月里我們將重點剖析該函數。這篇就到這里吧。


轉載于:https://www.cnblogs.com/lanzhi/archive/2012/02/03/6470894.html

總結

以上是生活随笔為你收集整理的distcc源码研究三的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。