linux源碼編譯的過程__linux
來源:互聯網
上載者:User
1、 Tar:解壓這個源碼軟體包。tar zxvf abc.gz
這步沒什麼好說的,把源碼包解壓開就好了,接下來第二步。 2、 cd :進入到這個源碼包。
現在ls一下mrtg這個目錄下多了一個藍色字型的httpd-2.2.11這個目錄,這個目錄就是我們剛解壓開的,然後cd進入到這個目錄下面。如果不進入到這個目錄下而是直接 ./configure 則會出現下圖的提示。 3、 ./configure : “configure” 會在你的系統上測試存在的特性 ( 或者 bug!) 然後 來建立 Makefile 檔案來完成 make 。 “configure”指令碼有大量的命令列選項,對不同的軟體包來說,這些選項可能會有變化,但是許多基本的選項是不會改變的。而我們用的最多的也就是下面這條命令: ./configure --prefix=/ 軟體要安裝的路徑 但是我們也可以直接./configure而不指定路徑,通常通過從源碼包編譯安裝的軟體預設路徑都是/usr/local/,如果./configure不成功而直接去make的話,就會出現下圖的錯誤: 當我們解決完 ./configure 的錯誤,然後重新./configure成功後,我們就可以編譯器了。 再說幾個能關係到能否編譯成功的檔案:/etc/ld.so.conf、ldconfig 首先說一下/etc/ld.so.conf,這個檔案中記錄的編譯時間使用的動態連結程式庫的路徑,預設情況下編譯器只會使用/lib和/usr/lib這兩個目錄下的庫檔案,如果你安裝了其他的庫,那麼安裝完成後就在/etc/ld.so.conf把這個庫檔案中的絕對路徑寫進去就OK了。 再來看看ldconfig是個什麼東西吧: 他是一個程式,它的作用就是將/etc/ld.so.conf中的路徑緩衝到/etc/ld.so.cache中,因此在安裝完一些庫檔案或者修改ld.so.conf增加新的路徑後需要運行一下/sbin/ldconfig使所有的庫檔案都緩衝都ld.so.cache中,如果沒有運行/sbin/ldconfig,即使庫檔案就在/etc/ld.so.conf中,也是不會被使用的,結果在編譯的過程中同樣報錯缺少XXX庫。 4 、 Make :編譯器。 在編譯的時候, gcc 個版本之間存在著差異,所以有時候用不同版本的 gcc 去編譯,有的版本能編譯成功,有的就編譯失敗,這樣的錯誤只是版本問題。 另外在 make 的時候會出現的另一個錯就是比較難辦的,遇到這樣的問題就只能憑經驗尋找原因,比如說某個標頭檔沒有找到,這個時候就要順著出錯的位置一行一行的往上找,比如顯示 XXXXXX.h………no such file or directory ,說明缺少標頭檔,或者找到你覺得有價值的錯誤資訊去搜尋引擎裡搜尋,從這裡可能會找到對你有用的資訊,最重要的就是在安裝之前仔細的去看 README 、 INSTALL 檔案,這兩個檔案裡會告訴你程式應該怎樣去安裝,需要什麼依賴檔案等等。 有的時候在編譯時間不知道是否編譯成功,而在沒有編譯成功就去 make install 肯定會出錯,這樣就增加了問題的複雜性,俗話說的好“道高一尺魔高一丈”,這樣我們可以在 make 結束的時候通過一條命令來檢查是否成功編譯: echo $? 輸入這條命令斷行符號後,輸出的結果是 0 ,那麼就說明成功編譯,否則就是出錯了, echo $? 表示檢查上一條命令的退出狀態,程式正常退出返回 0 。 5、 Make install :安裝檔案。 它也從 Makefile 中讀取指令,然後安裝到指定的位置。 看到上圖輸出 0 之後我們就可以 make install 來安裝了,運行完之後輸入 echo $? 檢查看看是否有錯誤,只要輸出結果為 0 ,那就說明我們的安裝成功 其實 ./configure 、 make 、 make install 這三個命令,我們可以用 && 來把命令串連起來執行,表示當前一條命令正常結束後,後面的命令才會執行,這個辦法很好,既節省時間,又可以防止發生錯誤。例: ./configure && make && make install