1. 程式人生 > 其它 >linux編譯原始碼教程

linux編譯原始碼教程

Linux上幾乎所有的軟體都經過了GPL授權,因此幾乎所有的軟體都會提供原始碼。
而一個軟體要在Linux上執行,必須是二進位制檔案,因此當我們拿到軟體原始碼後,需要將它編譯成二進位制檔案才能在Linux上執行。

1.軟體編譯過程

將原始碼編譯成可供Linux執行的二進位制檔案一共需要兩步:
\1. 使用gcc編譯器將原始碼編譯成目標檔案
\2. 再次使用gcc編譯器將目標檔案連結成二進位制檔案

這過程看似簡單,實則不然。一個軟體的原始碼往往被封裝在多個原始檔中,此外這些檔案有錯綜複雜的依賴關係,編譯需要嚴格按照指定的順序進行,這無疑增加了編譯的難度。好在make命令可以幫助我們簡化編譯過程。

整個編譯過程被濃縮在Makefile檔案中(告訴make命令需要怎麼去編譯和連結程式),當執行make命令時,make會去當前目錄中尋找Makefile檔案,並根據該檔案中的要求完成整個編譯過程。

而Makefile檔案由configure命令產生。當執行configure命令時,configure會根據當前系統環境動態生成一個適合本系統的Makefile檔案,供make命令使用。

2.Linux原始碼安裝步驟

  1. 獲取原始碼
    將軟體的原始碼下載至/usr/local/,並解壓。
  2. 檢視INSTALL與README檔案
    解壓後檢視INSTALL與README檔案,這兩個檔案中詳細介紹了本軟體的安裝方法和注意事項。
  3. 建立Makefile檔案
    執行configure命令,生成Makefile檔案。
  4. 編譯
    執行make clean;make命令將原始碼編譯成二進位制檔案。
    PS:make clean命令用來清除上一次編譯生成的目標檔案。這個步驟可有可無,但為了確保編譯的成功,還是加上為好。防止由於軟體中含有殘留的目標檔案導致編譯失敗。
  5. 安裝
    執行make install命令將上一步編譯好的二進位制檔案安裝到指定的目錄中去。

3.安裝演示

1.進入/usr/local/,並建立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.執行configure,生成Makefile檔案

./configure --prefix=/usr/local/memcached/

此時當前目錄下將會生成一個Makefile檔案。

  • 注意:–prefix引數指定軟體安裝目錄。當執行make install命令時,會將軟體安裝在此路徑中,如果不指定該引數,不指定prefix,可執行檔案預設放在/usr /local/bin,庫檔案預設放在/usr/local/lib,配置檔案預設放在/usr/local/etc。其它的資原始檔放在/usr /local/share。

\5. 執行make,從Makefile中讀取指令,編譯原始碼

make

此時make會讀取Makefile檔案,將原始碼編譯成二進位制檔案,並存放在當前目錄下。

執行這一步之前可以先進行清理作業:

make clean && make uninstall 

6.執行make install,將軟體安裝至指定目錄

make install

此時二進位制檔案會被安裝到先前configure prefix引數設定的路徑中去。
安裝完成!

4.cmake命令(瞭解)

cmake就是一個與make同級別的編譯工具,只不過它依靠的不是Makefile作為編譯規則,而是根據CMakeLists.txt來編譯的。
CMake是一個比make更高階的編譯配置工具,它可以根據不同平臺、不同的編譯器,通過編寫CMakeLists.txt,可以控制生成的Makefile,從而控制編譯過程。
CMake自動生成的Makefile不僅可以通過make命令構建專案生成目標檔案,還支援安裝(make install)、測試安裝的程式是否能正確執行(make test,或者ctest)、生成當前平臺的安裝包(make package)、生成原始碼包(make package_source)、產生Dashboard顯示資料並上傳等高階功能,只要在CMakeLists.txt中簡單配置,就可以完成很多複雜的功能,包括寫測試用例。
如果有巢狀目錄,子目錄下可以有自己的CMakeLists.txt。