搭建distcc分布式編譯環境

2021-06-07 07:01:33 字數 2481 閱讀 2511

簡介distcc 在日常工作中常為我們使用來解決大型專案在單一工作站上編譯較慢的問題。其主要用於對 c, object c 以及 c++ **進行並行編譯,將可以並行的編譯任務分布於編譯集群中的各個工作站,有效利用各機器資源,達到整體編譯效能的成倍提公升。

在類 unix 系統上,distcc 使用 sendfile 系統呼叫在不同工作節點之間傳送檔案,儘管這種網路檔案傳輸會占用一定的時間,他們對工作機的 cpu 資源占用卻很小,而且這種分發任務的方式能夠簡化構建環境的配置,distcc 在這方面同早期的一些基於共享檔案系統的分布編譯環境 (dmake, pvmmake 等等 ) 相比幾乎是 0 配置。

distcc 對各個編譯節點的本地系統庫及標頭檔案基本沒有要求,即使在不同的節點上這些元件的版本不同也不會影響到最終編譯結果的正確性,實際情況是 distcc 會在本地 (client 機 ) 完成存在版本依賴的編譯任務,這一點的實現原理簡要說來式因為 distcc 借助了 c/c++ 編譯驅動程式的以下特點:

1. cpp(c 預處理器 ) [cpp [arguments] .c 原始檔輸入 .i 中間檔案輸出 ]

2. ccl(c 編譯器 ) [ccl .i 中間檔案輸入 .c 原始檔輸入 [arguments] –o .s 彙編檔案輸出 ]

3. as( 彙編器 ) [as [arguments] –o .o 目標檔案輸出 .s 彙編檔案輸入 ]

這個在本地做過預處理的 ascii 原始檔及其他命令列選項即可唯一確定乙個目標檔案,而與此任務在哪台機器上執行無關,通過分發這種任務到各個節點,即可消除對頭檔案的依賴。同理 distcc 通過在任務的分發節點做鏈結來消除對庫檔案的依賴。

編譯android原始碼

參考以下資訊。

搭建分布式編譯器的機器有兩台,安裝ubuntu9.04作業系統,ip位址分別是192.168.0.215(a),192.168.0.111(b)。兩台機器上都有arm-eabi-4.4.0編譯器(可以從/android/prebuilt/toolchain/目錄下copy),放在目錄/usr/local/下。a機器提供編譯服務,b機器作為客戶端

1. server和client端都要做的操作:

1)首先確認server和client上都安裝了distcc

sudo apt-get install distcc

安裝distcc圖形介面監測程式(不是必須)

apt-get install distccmon-gnome

2)設定編譯器路徑到系統path中:

export path=/usr/local/arm-eabi-4.4.0/bin:$path

可以把此命令新增到~/.bashrc指令碼中,這樣每次啟動都自動設定好了。

3)sudo vi /etc/default/distcc

修改startdistcc的值為true。

startdistcc="true"

在a(server)上,

修改allowednets="192.168.0.0/16"

listener="192.168.0.215" (server的ip)

在b(client)上,不修改以上allowednets和listener的值。

其中allowednets採用了cidr位址規則,在這裡,192.168.0.0/16表示只要前16位為192.168的合法ip位址都可以請求編譯服務。

針對b機器,由於不對外提供編譯服務,所以只要將startdistcc設為true即可。

4)sudo vi /etc/init.d/distcc

將/usr/local/arm-eabi-4.4.0/bin新增到distcc的path變數中。

5)在/usr/lib/distcc中建立distcc的軟鏈結

a、b機器作相同的操作

cd /usr/lib/distcc

sudo ln –s ../../bin/distcc arm-eabi-gcc

sudo ln –s ../../bin/distcc arm-eabi-g++

…/usr/local/arm-eabi-4.4.0/bin/下面的所有編譯工具都要作到/usr/lib/distcc目錄下相應的鏈結。

2. 在client需要完成:

export path=/usr/lib/distcc:$path

要保證/usr/lib/distcc系統path的最前面

export distcc_hosts=」192.168.0.215 192.168.0.213」 (可新增多個server的ip)

3. server重啟distcc服務

sudo /etc/init.d/distcc restart (此步驟只需在server端執行,client端並不啟動distcc服務)

之後,在client上開始編譯android原始碼,可用distccmon-gnome來監視編譯過程。

搭建distcc分布式編譯Android原始碼

distcc 在日常工作中常為我們使用來 解決大型 專案在單一工作站上 編譯較慢的問題 其主要用於對 c,object c 以及 c 進行並行編譯,將可以並行的編譯任務分布於編譯集群中的各個工作站,有效利用各機器資源,達到整體編譯效能的成倍提公升。在類 unix 系統上,distcc 使用 send...

Distcc(分布式編譯)(方法1)

伺服器端 計算機名為 zhimingubtpc.local sudo apt get install distcc sudo vi etc default distcc 按a或i進入編輯模式 startdistcc true 預設為false allowednets 127.0.0.1 10.0.1...

Hadoop 分布式環境搭建

靜態ip 右擊寬頻連線network connections system eth0 ipv4 settings method manual addressse 192.168.斷開 連線 拷貝一台虛擬機器 虛擬機器 管理 轉殖 建立完整轉殖 ip設定 右擊網路連線 vi etc udev rule...