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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM