Linux 編譯安裝原始碼包
程式包編譯安裝 *.src.rpm→安裝後,使用rpmbuild命令製作成二進位制格式的rpm 包,而後再安裝; 原始碼組織格式: 多檔案:檔案中的程式碼段之間,很有可能存在跨檔案依賴關係; 各個語言的專案管理器: C,C++:make; Java:maven; make執行過程: make針對每一個原始碼都有一個專用的配置檔案,它會根據配置檔案作出決定,比如在預處理階段,決定呼叫那個前處理器如何預處理;在編譯階段決定呼叫哪個編譯器如何執行編譯,先編譯哪個檔案,後編譯哪個檔案;最後編譯生成的檔案要放到那些目錄等; 這個配置檔案就是makefile,因為不同使用者的需求不同,所以決定了makefile不可能是事先存在的,需要根據需求而臨時生成的,那麼它是怎麼生成的那:由Makefile.in生成;makefile.in就類似一個模板,使用者選擇好不同的引數之後根據模板而生成makefile,比如事先設定各種配置檔案的安裝路徑等;那麼問題來了:Makefile.in這個模板是怎麼生成的那,它是由configure這個指令碼生成的;configure指令碼允許使用者傳遞給它一些選項用來指明程式包的編譯引數、啟用特性、安裝路徑等; 大體過程:configure通過使用者指定的選項然後結合Makefile.in模板來生成makefile檔案; 編譯安裝三步驟: ./configure 通過選項傳遞引數,指定啟用特性,安裝路徑;執行時會參考使用者指定的引數以及Makefile.in模板生成makefile檔案; 檢各個啟用的功能所依賴的外部環境; make 根據makefile檔案,構建應用程式; make install:其實這一步就是把編譯(構建)好的程式的檔案放到相對應的目錄下,使用cp命令也可以完成; 開發工具: 一般情況下原始碼包都會自帶configure,但是也有的原始碼包不帶,所以就需要我們自己生成它,如果手動的一步一步的編寫這個就指令碼無疑是很費時間的,所以就有了可以自動生成它的開發工具; autoconf:生成configure指令碼; automake:生成Makefile.in檔案; 因不同的需求而啟動的功能有所不同,所以導致configure也是不同的,所以autoconf也是需要根據配置檔案來生成configure指令碼的;Makefile.in同理; 建議:安裝前檢視INSTALL、README說明文字; 開原始碼獲取途徑: 官方自建站點 apache.org(ASF) mariadb.org … 程式碼託管 SourceForge Github.com code.google.com 編譯C原始碼 前提:提供開發工具和開發環境; 開發工具:gcc,make; 開發環境:開發庫,標頭檔案; 通過“包組”提供開發工具; Centos 6 常用開發庫:“Development Tools”,“Server Platform Development”; Centos7 常用開發庫:“Development Tools”; 第一步 ./configure 選項:指定安裝位置,指定啟用的特性; --help:檢視幫助; --prefix=/PATH/TO/SOMEWHERE:指定預設安裝目錄;預設安裝到/usr/local/ --sysconfdir=/PATH/TO/SOMEWHERE:指明配置檔案安裝的路徑; System Types:指明目標系統平臺,可以實現交叉編譯; 不同軟體的原始碼包實現功能不同,所以選項也各有不同,根據情況隨機應變; Optional Features:可選特性; 可以啟用或關閉特性,選項略; Optional Packages:定義依賴到的程式包,跟依賴關係相關; 第二步 make 第三步 make install 安裝後的配置: 匯出二進位制程式目錄至環境變數PATH中 編輯檔案:/etc/prefile.d/NAME.sh 新增export PATH=/PATH/TO/BIN:$PATH 匯出庫檔案路徑 編輯/etc/ld.so.conf.d/NAME.conf 新增新的庫檔案所在目錄至此檔案中; 再讓系統重新生成快取: ldconfig -[v] 匯出標頭檔案 基於符號連結的方式實現; ln -s 匯出man手冊 編輯/etc/man_db.conf檔案; 注:根據馬哥視訊做的學習筆記,如有錯誤,歡迎指正:侵刪