標籤:如何手動編譯軟體
軟體編譯安裝
我們知道在安裝某一個軟體時,有些我們不需要安裝的程式或者特性被安裝到系統上去了,而我們需要的程式或者特性沒有被安裝進去,或者說該軟體存在一些漏洞等等因素,我們都需要修改該軟體的原始碼,然後在重新編譯生產一個二進位檔案,最後使用者才可以安裝這個二進位檔案。
我們知道系統真正識別的檔案其實只有二進位檔案,而某個軟體的原始碼就是就是一段程式,而這類程式是供人看的,系統並不識別,因此為了讓系統能夠識別這段原始碼的內容,必須要對原始碼進行轉換,轉換成系統能夠識別的二進位程式。而原始碼轉換成二進位檔案需要藉助編譯器來完成。
所謂編譯器就是將程式碼解析成系統能夠識別的二進位程式。
所以我們可以這樣來理解原始碼、編譯器、二進位程式的概念
原始碼:就是我們常說的程式碼
編譯器:將原始碼轉換成二進位檔案
二進位檔案:就是系統能夠識別的程式
將原始碼編譯成二進位檔案的流程圖為:
650) this.width=650;" title="QQ20140722202813.png" src="http://s3.51cto.com/wyfs02/M00/40/4A/wKioL1POWhjzqcU5AABf_a6VDYk794.jpg" alt="wKioL1POWhjzqcU5AABf_a6VDYk794.jpg" />
其中在大多linux distribution中使用最多的編譯器就是gcc了。而在編譯的過程中,我們可能會調用某一些已經存在的庫檔案,這些庫檔案可以來完成某些功能的。切記,函數庫是不能自動執行的,只有被調用,這個庫檔案的內容才會發揮作用。並且函數庫分為靜態和動態函數庫。
在整個編譯的過程中包括如下步驟:
一、準備好開發環境或者編譯環境
這其中的編譯環境主要包括以下幾點:
1、 是否有合適的編譯器可以編譯該軟體的原始碼,例如是否有gcc等編譯器
2、 該軟體所需要的函數庫是否存在,以及該軟體所依賴的其他軟體
3、 該軟體是否適合該作業系統
4、 核心的表標頭檔(header include)是否存在
如果該編譯環境不符合的話,可能在安裝過程中出現錯誤,以至於安裝失敗
二、安裝"Development Tools"和"Development Libraries"
三、編譯及安裝
其實使用gcc類似的編譯器來編譯器過程比較複雜,除了每一個程式需要寫上一段代碼之外,還
需要寫上最終的連結程式。而我們使用make這個專案管理工具就可以簡化整個編譯過程。
make的工作機制:make其實也是一隻程式,當make執行時,make會在目前的目錄下搜尋
Makefile(或者makefile)這個文字檔,該檔案記錄了原始碼如何被編譯的詳細資料。而makefile
這個檔案是由configure這個程式產生的。Configure這個程式主要是用來檢測編譯環境和在編譯的過
程中讓使用者選擇編譯特性的。如果檢測不成功,那麼安裝也不會成功。在檢測環境完成後,就會
生產makefile檔案。
因此編譯和安裝又可以分為如下步驟:
1、 預設原始碼檔案為*.tar.gz的,所以需要使用tar命令來解壓縮,解壓縮後的檔案放在/usr/local/src目錄下
2、 使用cd命令切換到原始碼所在的目錄
3、 運行configure這個程式檢測編譯環境,產生makefile檔案
在運行configure這個程式時,後面可以加上一些參數,這些參數可以改變某些編譯特性。例如:
--help:顯示所有的編譯參數
--prefix=/path/to/somewhere:指定軟體安裝後的產生檔案的位置
--conf-path=/path/to/somefile:指定軟體的設定檔
--sysconfdir=/path/to/somewhere:指定設定檔的目錄
4、使用make命令根據makefile檔案中的參數進行編譯
5、使用make install命令來安裝
我們知道一個程式的組成一般包括:二進位程式,函數庫、設定檔、協助檔案等
其中這個二進位程式如果要啟動並執行話,必須使用全路徑名稱來運行,因為PATH變數中沒有這個二進位檔案路徑。或者直接修改PATH變數,讓其能夠識別此程式的二進位檔案路徑。
修改PATH變數的方法有兩種:
一、直接修改/etc/profile檔案,修改PATH變數的值
二、在/etc/profile.d目錄下建立一個以.sh為名稱尾碼的檔案,在這裡添加一行
export PATH=$PATH:/path/to/somefile
而庫檔案預設存放在/lib,/usr/lib目錄下。要增添額外的搜尋路徑可以這麼做:
在/etc/id.so.conf.d/中建立以.conf為尾碼的檔案,而後把要增添的路徑直接寫在此檔案中;
使用idconfig命令可以通知系統重新搜尋庫檔案
其中-v:顯示重新搜尋庫檔案的過程
標頭檔:輸出給系統
預設:/usr/include
增添標頭檔搜尋路徑,使用連結進行:
/usr/local/tengine/include/ /usr/include/
兩種方式:
ln -s /usr/local/tengine/include/* /usr/include/ 或
ln -s /usr/local/tengine/include /usr/include/tengine
該軟體產生的協助檔案預設存放在指定目錄下的man目錄下。為了可以使用man命令查詢可以這樣做:
1、man -M /PATH/TO/MAN_DIR COMMAND
2、在/etc/man.config中添加一條MANPATH
本文出自 “linux學習之路” 部落格,謝絕轉載!
linux學習之路之受到編譯軟體