本篇內(nèi)容介紹了“l(fā)inux要編譯源碼的原因是什么”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
成都創(chuàng)新互聯(lián)是一家專注于網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)與策劃設(shè)計(jì),太子河網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十載,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:太子河等地區(qū)。太子河做網(wǎng)站價(jià)格咨詢:18980820575
原因: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ù)。
一般來(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上幾乎所有的軟件都經(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。
“l(fā)inux要編譯源碼的原因是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!