linux原始碼包編譯安裝軟體詳解

2021-08-13 11:11:30 字數 1811 閱讀 8730

./configure

make

make install

原始碼安裝三部曲,一直在使用卻一直知其然不知其所以然,今天就說說所以然。 

原始碼到成為可執行程式經歷了一下步驟

原始碼–>預處理–>編譯–>彙編–>鏈結–>執行

make就做了編譯彙編的工作,當然也也不是隨隨便便就幹活的,要有依據,那他是根據什麼幹活的呢?根據乙個叫makefile的檔案。那麼makefile哪來的呢?configure生成的。現在指定為什麼make之前要執行./configure了吧。 

configure也是個懂規矩的孩子,他也不會亂生成的,他會根據乙個叫做makefile.in的模板檔案生成makefile。 

問題又來了,makefile.in哪來的呢?當然是由乙個叫automake的工具生成的。configure哪來的啊。他是由乙個叫autoconf的工具生成的。

make install幹了寫什麼呢,其實他就幹了乙個工作,把編譯好的檔案複製到指定的目錄。說到底就是呼叫了install命令。可以自己去搜一下install命令,這個是個拷貝命令。

下面我們來總結一下整個編譯安裝的過程經歷了什麼。 

在發布原始碼包前開發人員用automake生成makefile.in,用autoconf生成configure腳步 

然後我們拿到的原始碼包,裡面有原始碼、makefile.in檔案、configure腳步。 

我們執行./configure根據自己的配置和makefile檔案中的配置進行結合,處理依賴包的關係,生成makefile檔案 

執行make命令根據makefile的資訊,呼叫編譯工具,可能是gcc也可能是其他編譯器,對原始碼進行編譯 

執行make install將編譯後生成的檔案複製到指定位置。 

整個編譯完成。 

這樣就可以用了嗎?可以。

但是貌似啟動起來好麻煩,得切換到安裝的目錄的bin目錄下,要是能直接在命令列的任何路徑下都能管理啟動或是關閉就好了,你還要對一些執行檔案做軟連線,新增環境變數,設定啟動服務等,要不然你每次都要到程式的安裝目錄去執行這是多麼痛苦的事啊。 (以apache為例):

匯出二進位制程式目錄至path環境變數中; 

編輯檔案/etc/profile.d/httpd2.2.sh檔案,在檔案中寫入下邊一行即可;(注意,httpd2.2.sh檔案並不存在,建立即可) 

儲存退出,要讓此設定即刻生效,需要在當前目錄下執行命令 

現在我們就可以在系統的任何路徑下開啟或關閉httpd服務了,而不用記住那一長串的路徑了

匯出標頭檔案(可以將目錄建立乙個符號鏈結,或者所有標頭檔案每乙個檔案都建乙個) 

基於鏈結的方式實現: 

configure腳步配置選項說明 

安裝路徑設定 

–prefix=path/to/dir 指定預設安裝路徑 

–sysconfdir=path/to/dir 配置檔案安裝位置 

system types: 

optional features:可選特性 

–disable-feature 禁用某特性 

–enable-feature[=age] 啟用某特性 

optional packages:可選包 

–with-package[=package] 依賴的包 

–without-package 不需要的包

原始碼編譯安裝軟體包

1 準備編譯環境,linux中絕大多數軟體的原始碼都是用c語言寫的,少部分用c 或其他語言編寫。因此想要編譯源 需要先按照gcc編譯器和gcc c 編譯器。安裝編譯器和常用庫 yum groupinstall y development tools yum install y gcc gcc c a...

Linux 原始碼包安裝軟體

在linux bsd系統中,軟體包主要以兩種形式出現 二進位製包以及源 包。之前一直說的rpm包就是屬於二進位製包,也就是已經編譯好的軟體包.這裡說源 包則主要適用於自由軟體的安裝,使用者需要自己編譯它們。一般是我們手動指定安裝在 usr local下,相當於windows下是program fil...

原始碼包編譯安裝

源 預處理 編譯 彙編 鏈結 執行1 configure 1 通過選項傳遞引數,指定啟用特性 安裝路徑等 執行時會參考使用者的指定及makefile.in檔案聲稱makefile。2 檢查依賴到的外部環境,如依賴的軟體包。2 make 根據makfile檔案,構建應用程式。3 make instal...