linux學習之路之受到編譯軟體

來源:互聯網
上載者:User

標籤:如何手動編譯軟體

軟體編譯安裝

我們知道在安裝某一個軟體時,有些我們不需要安裝的程式或者特性被安裝到系統上去了,而我們需要的程式或者特性沒有被安裝進去,或者說該軟體存在一些漏洞等等因素,我們都需要修改該軟體的原始碼,然後在重新編譯生產一個二進位檔案,最後使用者才可以安裝這個二進位檔案。

 

我們知道系統真正識別的檔案其實只有二進位檔案,而某個軟體的原始碼就是就是一段程式,而這類程式是供人看的,系統並不識別,因此為了讓系統能夠識別這段原始碼的內容,必須要對原始碼進行轉換,轉換成系統能夠識別的二進位程式。而原始碼轉換成二進位檔案需要藉助編譯器來完成。

所謂編譯器就是將程式碼解析成系統能夠識別的二進位程式。

 

所以我們可以這樣來理解原始碼、編譯器、二進位程式的概念

原始碼:就是我們常說的程式碼

編譯器:將原始碼轉換成二進位檔案

二進位檔案:就是系統能夠識別的程式

將原始碼編譯成二進位檔案的流程圖為:

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學習之路之受到編譯軟體

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.