原因:1、linux發(fā)型版本眾多,但是每個(gè)版本采用的軟件或者內(nèi)核版本都不一樣,而二進(jìn)制包所依賴的環(huán)境不一定能夠正常運(yùn)行,所以大部分軟件直接提供源碼進(jìn)行編譯安裝。2、方便定制,滿足不同的需求。3、方便運(yùn)維、開(kāi)發(fā)人員維護(hù);源碼是可以打包二進(jìn)制的,但是對(duì)于這個(gè)軟件的打包都會(huì)有一份代價(jià)不小的額外工作,包括維護(hù),所以如果是源碼的話,軟件產(chǎn)商會(huì)直接維護(hù)。
本教程操作環(huán)境:linux7.3系統(tǒng)、Dell G3電腦。
linux為什么要編譯源碼
一般來(lái)說(shuō),我們軟件的安裝方式有yum(rpm),和源碼編譯兩種方式,那么為什么我們需要源碼編譯安裝一部分軟件?選擇源碼編譯安裝軟件有以下幾個(gè)原因:
-
滿足不同的運(yùn)行平臺(tái),我們Linux發(fā)型版本眾多,但是每個(gè)版本采用的軟件或者內(nèi)核版本都不一樣,而我們的二進(jìn)制包所依賴的環(huán)境不一定能夠正常運(yùn)行,所以大部分軟件直接提供源碼!
-
方便定制,滿足不同的需求,很多時(shí)候我們所需要的軟件都是可以定制的,我需要什么就安裝什么,大多數(shù)二進(jìn)制代碼都是一鍵裝全,所以自由度并不高!
-
方便運(yùn)維、開(kāi)發(fā)人員維護(hù),我們的源碼是可以打包二進(jìn)制的,但是對(duì)于這個(gè)軟件的打包都會(huì)有一份代價(jià)不小的額外工作,包括維護(hù),所以如果是源碼的話,軟件產(chǎn)商會(huì)直接維護(hù),但是如果是二進(jìn)制的話,一般都是Linux發(fā)行商提供。
linux編譯源碼教程
Linux上幾乎所有的軟件都經(jīng)過(guò)了GPL授權(quán),因此幾乎所有的軟件都會(huì)提供源碼。
而一個(gè)軟件要在Linux上執(zhí)行,必須是二進(jìn)制文件,因此當(dāng)我們拿到軟件源碼后,需要將它編譯成二進(jìn)制文件才能在Linux上運(yùn)行。
1、軟件編譯過(guò)程
將源碼編譯成可供Linux運(yùn)行的二進(jìn)制文件一共需要兩步:
-
使用gcc編譯器將源碼編譯成目標(biāo)文件
-
再次使用gcc編譯器將目標(biāo)文件鏈接成二進(jìn)制文件
這過(guò)程看似簡(jiǎn)單,實(shí)則不然。一個(gè)軟件的源代碼往往被封裝在多個(gè)源文件中,此外這些文件有錯(cuò)綜復(fù)雜的依賴關(guān)系,編譯需要嚴(yán)格按照指定的順序進(jìn)行,這無(wú)疑增加了編譯的難度。好在make命令可以幫助我們簡(jiǎn)化編譯過(guò)程。
整個(gè)編譯過(guò)程被濃縮在Makefile文件中(告訴make命令需要怎么去編譯和鏈接程序),當(dāng)執(zhí)行make命令時(shí),make會(huì)去當(dāng)前目錄中尋找Makefile文件,并根據(jù)該文件中的要求完成整個(gè)編譯過(guò)程。
而Makefile文件由configure命令產(chǎn)生。當(dāng)執(zhí)行configure命令時(shí),configure會(huì)根據(jù)當(dāng)前系統(tǒng)環(huán)境動(dòng)態(tài)生成一個(gè)適合本系統(tǒng)的Makefile文件,供make命令使用。
2、Linux源碼安裝步驟
-
獲取源碼
將軟件的源碼下載至/usr/local/,并解壓。 -
查看INSTALL與README文件
解壓后查看INSTALL與README文件,這兩個(gè)文件中詳細(xì)介紹了本軟件的安裝方法和注意事項(xiàng)。 -
創(chuàng)建Makefile文件
執(zhí)行configure命令,生成Makefile文件。 -
編譯
執(zhí)行make clean;make命令將源碼編譯成二進(jìn)制文件。
PS:make clean命令用來(lái)清除上一次編譯生成的目標(biāo)文件。這個(gè)步驟可有可無(wú),但為了確保編譯的成功,還是加上為好。防止由于軟件中含有殘留的目標(biāo)文件導(dǎo)致編譯失敗。 -
安裝
執(zhí)行make install命令將上一步編譯好的二進(jìn)制文件安裝到指定的目錄中去。
3、安裝演示
1)進(jìn)入/usr/local/,并創(chuàng)建memcached目錄:
cd /usr/local/ mkdir memcached
2)下載memcached的源碼
wget http://memcached.org/files/memcached-1.4.29.tar.gz
3)解壓源碼
tar -zxvf memcached-1.4.29.tar.gz
4)執(zhí)行configure,生成Makefile文件
./configure --prefix=/usr/local/memcached/
此時(shí)當(dāng)前目錄下將會(huì)生成一個(gè)Makefile文件。
注意:–prefix參數(shù)指定軟件安裝目錄。當(dāng)執(zhí)行make install命令時(shí),會(huì)將軟件安裝在此路徑中,如果不指定該參數(shù),不指定prefix,可執(zhí)行文件默認(rèn)放在/usr /local/bin,庫(kù)文件默認(rèn)放在/usr/local/lib,配置文件默認(rèn)放在/usr/local/etc。其它的資源文件放在/usr /local/share。
5)執(zhí)行make,從Makefile中讀取指令,編譯源碼
make
此時(shí)make會(huì)讀取Makefile文件,將源碼編譯成二進(jìn)制文件,并存放在當(dāng)前目錄下。
執(zhí)行這一步之前可以先進(jìn)行清理作業(yè):
make clean && make uninstall
6)執(zhí)行make install,將軟件安裝至指定目錄
make install
此時(shí)二進(jìn)制文件會(huì)被安裝到先前configure prefix參數(shù)設(shè)置的路徑中去。
安裝完成!
4、cmake命令(了解)
cmake就是一個(gè)與make同級(jí)別的編譯工具,只不過(guò)它依靠的不是Makefile作為編譯規(guī)則,而是根據(jù)CMakeLists.txt來(lái)編譯的。
CMake是一個(gè)比make更高級(jí)的編譯配置工具,它可以根據(jù)不同平臺(tái)、不同的編譯器,通過(guò)編寫CMakeLists.txt,可以控制生成的Makefile,從而控制編譯過(guò)程。
CMake自動(dòng)生成的Makefile不僅可以通過(guò)make命令構(gòu)建項(xiàng)目生成目標(biāo)文件,還支持安裝(make install)、測(cè)試安裝的程序是否能正確執(zhí)行(make test,或者ctest)、生成當(dāng)前平臺(tái)的安裝包(make package)、生成源碼包(make package_source)、產(chǎn)生Dashboard顯示數(shù)據(jù)并上傳等高級(jí)功能,只要在CMakeLists.txt中簡(jiǎn)單配置,就可以完成很多復(fù)雜的功能,包括寫測(cè)試用例。
如果有嵌套目錄,子目錄下可以有自己的CMakeLists.txt。
相關(guān)推薦:《Linux視頻教程》