2021-05-12 14:32:11
Linux基礎教學:從原始碼安裝軟體
為什麼要從原始碼安裝軟體
在什麼情況之下,我們需要從原始碼安裝軟體呢?我想不外乎這些情形:一種情況是軟體放出了新的版本,而所用的發行版並沒有及時跟進,這時候,想要嘗鮮的話,就非得靠自己不可;另一種情形是不管是軟體的開發者,還是現用的系統都沒有提供可直接使用的二進位制包,而自己又非要使用該軟體,那麼也需親自出馬才行;當然,還有其他的情形。總而言之,學會從原始碼安裝軟體是一項非常重要的技能。
什麼是make 與 configure
make 是一支程式,當執行make 時,make 會在當前目錄下尋找 makefile 這個文字檔案。 makefile 中定義了原始碼是如何編譯的詳細資訊,如何呼叫 gcc對原始碼進行編譯生成目標檔案,如何連結生成可執行檔案。
makefile 是如何生成的呢? 通常,軟體開發商都會提供一個檢測程式來檢測使用者的作業系統環境,該程式檢測完畢之後,就會主動的建立這個makefile 。
準備工作
那麼,要如何才能從原始碼安裝軟體呢?首先,你必須要做好為編譯原始碼所需的準備工作。這包括兩個方面:
-
編譯工具:要將原始碼編譯成可執行的二進位制檔案,編譯工具必不可少: gcc , g++ , make , autoconfig 等等。在CentOS系列中,可以通過 yum -y groupinstall "Development Tools" 來安裝。在 Ubuntu 中,可以從終端中執行
sudo apt-get install build-essential
指令來安裝基本的編譯工具。根據所編譯程式的實際情況,你也可能需要安裝其他一些工具。 -
編譯依賴:除了安裝基本的編譯工具之外,為了順利編譯原始碼,我們也要把該程式所需要的依賴安裝好。包含系統提供的庫函數, 以及第三方軟體的依賴包。在CentOS系列中,可以通過 yum -y install xxxx xxxx-devel 來安裝相應的依賴包。Ubuntu 系統可以通過
sudo apt-get build-dep
命令後跟包名的方式來準備所需的依賴。一般情況下,如果 configure 或者 make 報錯,其報錯資訊都明確的指出缺少依賴,只需按要求做即可。或者把錯誤資訊複製到 google 一下,即可愉快的解決。
原始碼安裝3部曲: ./configure ; make && make install
在編譯原始碼之前,你一定把軟體的原始碼包下載到了自己的硬碟上吧。一般而言,程式原始碼包經常被打包成 .tar.gz 和 .tar.bz2 這兩種格式。前者可用 tar zxvf *.tar.gz
來解包,後者則用 tar jxvf *.tar.bz2
。通常情況建議解壓到 /usr/local/src 目錄: # tar xf *.tar.gz -C /usr/local/src
通常,在解包後,我們應該閱讀程式附帶的相關說明檔案,如 README(讀我檔案)、INSTALL(安裝檔案)等,以便了解程式的編譯介紹。這一步超級重要!!!
當所有的事情都準備妥當了後,那麼讓我們來進行原始碼編譯的三部曲吧。
-
設定,建立makefile檔案:這是編譯原始碼的第一步,通過
./configure
命令完成。執行此步以便為編譯原始碼作準備。常用的選項有--
prefix=PREFIX,用以指定程式的安裝位置。更多的選項可通過 --help 查詢。也有某些程式無需執行此步。 -
編譯:一旦設定通過,可即刻使用
make
指令根據makefile的定義,呼叫 gcc 來執行原始碼的編譯過程。視軟體的具體情況而定,編譯所需的時間也各有差異,我們所要做的就是耐心等候和靜觀其變。此步雖然僅下簡單的指令,但有時候所遇到的問題卻十分複雜。較常碰到的情形是程式編譯到中途卻無法圓滿結束。此時,需要根據出錯提示分析以便找到應對之策。需要執行 make clean , 然後再重新執行 make 指令。 -
安裝:如果編譯沒有問題,那麼執行
make install
就可以將程式安裝到系統中了。
需要注意的是:上面的步驟必須一步一步的進行,只要其中的一個步驟無法成功,那麼後續就完全沒有辦法再進行。
管理:目錄規劃,解除安裝,升級
-
原始碼通常解壓到 /usr/local/src 目錄
-
安裝時最好安裝在 /usr/local 目錄
-
將 軟體的 man page 加入 man path 中, 編輯 /etc/man.config ,增加 MANPATH 項。
-
把軟體的 bin 目錄加入到 PATH 環境變數, 編輯 /etc/profile.d/xxxx.sh, 增加 export PATH=$PATH:/usr/local/xxx/bin
若是覺得所編譯的軟體不夠適用想要刪除,又如何做呢?我們只需轉到編譯原始碼的目錄,執行 sudo make uninstall
命令。
相關閱讀:C++靜態庫與動態庫 http://www.linuxidc.com/Linux/2015-04/115811.htm
更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2015-04/115812p2.htm
相關文章