我們在工作的過程中,有時候會利用源碼包安裝軟體。雖然相對於二進位軟體包,配置和編譯起來繁瑣點,但是它的可移植性卻好得多。 ...
我們在工作的過程中,有時候會利用源碼包安裝軟體。雖然相對於二進位軟體包,配置和編譯起來繁瑣點,但是它的可移植性卻好得多。
那麼我們一起來看看如何在linux下安裝軟體該怎麼以源碼包方式來安裝呢?
Linux下源碼安裝一般包括以下步驟:
獲取源碼
解壓
創建Makefile文件
生成Makefile文件
編譯
執行make clean;make命令將源碼編譯成二進位文件。
下來我們看看編譯過程的實現是怎麼樣的?
將源碼編譯成可供Linux運行的二進位文件一共需要兩步:
1. 使用gcc編譯器將源碼編譯成目標文件
2. 再次使用gcc編譯器將目標文件鏈接成二進位文件
這過程看似簡單,實則不然。一個軟體的源代碼往往被封裝在多個源文件中,此外這些文件有錯綜複雜的依賴關係,編譯需要嚴格按照指定的順序進行,這無疑增加了編譯的難度。好在make命令可以幫助我們簡化編譯過程。
整個編譯過程被濃縮在Makefile文件中,當執行make命令時,make會去當前目錄中尋找Makefile文件,並根據該文件中的要求完成整個編譯過程。
安裝過程中具體所用命令如下,大家可以參考
一、解壓:
最常見源碼包的就兩種(XXXX.tar.gz or XXXX.tar.bz2),其實這些源碼包都是由2個工具壓縮而成的,tar.gz結尾的文件用到的工具是tar和gunzip,而tar.bz2結尾的文件所使用的工具是tar和bzip2,之所以這樣做是因為,tar僅僅能夠打包多個文件但是沒有壓縮的功能,而gz和bz2卻剛好相反,僅能夠壓縮單個文件,這樣我們常見的源碼包實際上是通過tar先將不同的源文件打包,然後再通過gunzip或者bzip2壓縮後發佈的。
解壓的相關命令如下:
$ tar zxvf XXXX.tar.gz
$ tar jxvf XXXX.tar.bz2
二、./configure:
解壓完成就正式開始安裝了(補充一點,開始configure之前,如有必要,請使用patch工具為源碼打上相應的補丁),首先跳轉到源碼的解壓目錄,眾所周知,開始configure前還是應該仔細閱讀源碼目錄下的README或者INSTALL文件,好多安裝中的註意事項在這裡都有所羅列,configure實際上是一個腳本文件,在當前目錄中鍵入"./configure",shell就會運行當前目錄下的configure腳本,有一點必須說明,在整個configure過程,其實編譯尚未進行,configure僅僅是做編譯相關的準備工作,它主要對您當前的工作平臺做一些依賴性檢查,比如編譯器是否安裝,連接器是否存在,如果在檢測的過程沒有任何錯誤,你很幸運,configure腳本會在當前目錄下生成下一步編譯鏈接所要用到的另一個文件Makefile,當然configure支持及其豐富的命令行參數,可以鍵入"./configre --help"獲取具體的信息,最常用的就是:
$ ./configure --prefix=/opt/XXX,它用來設置軟體的安裝目錄.
三、make:
如果configure過程正確完成,那麼在源碼目錄,會生成相應的Makefile文件,Makefile文件簡單來說包括的是一組文件依賴關係以及編譯鏈接的相關步驟,事實上真正的編譯鏈接工作也不是make所做的,make只是一個通用的工具,一般情況下,make會根據Makefile中的規則調用合適的編譯器編譯所有與當前軟體相依賴的源碼,生成所有相關的目標文件,最後再使用鏈接器生成最終的可執行程式:
$ make
四、make install:
當上面兩個步驟正確完成,代表著編譯鏈接過程已經完全結束,最後要做的就是將可執行程式安裝到正確的位置,在這個步驟,普通用戶可能沒有相關目錄的操作許可權,臨時切換到root是一個不錯的選擇,"install"只是Makefile文件中的一個標號,"make install"代表著make工具執行Makefile文件中"install"標號下的所有相關操作,如果在configure階段沒有使用"--prefix=/opt/XXX"指定應用程式的安裝目錄,那麼應用程式一般會被預設安裝到/usr/local/bin,如果/usr/local/bin已經存在於您的PATH中,那麼安裝已經基本結束。