您的位置:首页 > 运维架构 > Linux

Linux学习笔记 - 軟體安裝:原始碼與 Tarball

2014-01-07 23:02 656 查看
来自鸟哥的Linux私房菜 http://linux.vbird.org/linux_basic/0520source_code_and_tarball.php

Linux 系統上真正認識的可執行檔其實是二進位檔案 ( binary program)。

用file这个指令来测试一个档案是否为二进制档案。如果是 binary 而且是可以執行的時候,他就會顯示執行檔類別 (ELF 32-bit LSB executable), 同時會說明是否使用動態函式庫 (shared libs),而如果是一般的 script ,那他就會顯示出 text executables 之類的字樣!

當執行 make 時,make 會在當時的目錄下搜尋 Makefile (or makefile) 這個文字檔,而 Makefile 裡面則記錄了原始碼如何編譯的詳細資訊! make 會自動的判別原始碼是否經過變動了,而自動更新執行檔。

通常軟體開發商都會寫一支偵測程式來偵測使用者的作業環境, 以及該作業環境是否有軟體開發商所需要的其他功能,該偵測程式偵測完畢後,就會主動的建立 Makefile 的規則檔案啦!通常這支偵測程式的檔名為 configure 或者是 config 。

所謂的 Tarball 檔案,其實就是使用 tar 與 gzip/bzip2 壓縮功能所打包與壓縮的,具有原始碼的檔案。

Linux distribution 廠商預先編譯好程式的機制存在於很多 distribution 喔,包括有 Red Hat 系統 (含 Fedora/CentOS 系列) 發展的 RPM 軟體管理機制與 yum 線上更新模式; Debian 使用的 dpkg 軟體管理機制與 APT 線上更新模式等等。

一個軟體的 Tarball 的基本安装流程为:

將 Tarball 由廠商的網頁下載下來;

將 Tarball 解開,產生很多的原始碼檔案;

開始以 gcc 進行原始碼的編譯 (會產生目標檔 object files);

然後以 gcc 進行函式庫、主、副程式的連結,以形成主要的 binary file;

將上述的 binary file 以及相關的設定檔安裝至自己的主機上面。

gcc编译器的常用使用范例

gcc -c hello.c # 會自動的產生 hello.o 這個檔案,但是並不會產生 binary 執行檔。

gcc -O hello.c -c # 會自動的產生 hello.o 這個檔案,並且進行最佳化喔!

gcc sin.c -lm -L/usr/lib -I/usr/include #這個指令較常下達在最終連結成 binary file 的時候,-lm 指的是 libm.so 或 libm.a 這個函式庫檔案;-L 後面接的路徑是剛剛上面那個函式庫的搜尋目錄;-I 後面接的是原始碼內的 include 檔案之所在目錄。

gcc -o hello hello.c # -o 後面接的是要輸出的 binary file 檔名

gcc -o hello hello.c -Wall #在編譯的時候,輸出較多的訊息說明

基本的 makefile 規則是這樣的:

標的(target): 目標檔1 目標檔2
<tab>   gcc -o 欲建立的執行檔 目標檔1 目標檔2


makefile文件中變數的基本語法為:

變數與變數內容以『=』隔開,同時兩邊可以具有空格;

變數左邊不可以有 <tab> ,例如上面範例的第一行 LIBS 左邊不可以是 <tab>;

變數與變數內容在『=』兩邊不能具有『:』;

在習慣上,變數最好是以『大寫字母』為主;

運用變數時,以 ${變數} 或 $(變數) 使用;

在該 shell 的環境變數是可以被套用的,例如提到的 CFLAGS 這個變數!

在指令列模式也可以給予變數。

還有一些特殊的變數:

$@:代表目前的標的(target)

CFLAGS: gcc 在進行編譯的行為時,會主動的去讀取 CFLAGS 這個環境變數.

Tarball 安裝的基本步驟:

1.取得原始檔:將 tarball 檔案在 /usr/local/src 目錄下解壓縮;

2.取得步驟流程:進入新建立的目錄底下,去查閱 INSTALL 與 README 等相關檔案內容 (很重要的步驟!);

3.相依屬性軟體安裝:根據 INSTALL/README 的內容察看並安裝好一些相依的軟體 (非必要);

4.建立 makefile:以自動偵測程式 (configure 或 config) 偵測作業環境,並建立 Makefile 這個檔案;

5.編譯:以 make 這個程式並使用該目錄下的 Makefile 做為他的參數設定檔,來進行 make (編譯或其他) 的動作;

6.安裝:以 make 這個程式,並以 Makefile 這個參數設定檔,依據 install 這個標的 (target) 的指定來安裝到正確的路徑!

大部分的 tarball 軟體之安裝的指令下達为:

./configure

這個步驟就是在建立 Makefile 這個檔案囉!通常程式開發者會寫一支 scripts 來檢查你的 Linux 系統、相關的軟體屬性等等,這個步驟相當的重要, 因為未來你的安裝資訊都是這一步驟內完成的!另外,這個步驟的相關資訊應該要參考一下該目錄下的 README 或 INSTALL 相關的檔案!

make clean

make 會讀取 Makefile 中關於 clean 的工作。這個步驟不一定會有,但是希望執行一下,因為他可以去除目標檔案!

make

make 會依據 Makefile 當中的預設工作進行編譯的行為!使用 make 就是要將原始碼編譯成為可以被執行的可執行檔,而這個可執行檔會放置在目前所在的目錄之下, 尚未被安裝到預定安裝的目錄中;

make install

通常這就是最後的安裝步驟了,make 會依據 Makefile 這個檔案裡面關於 install 的項目,將上一個步驟所編譯完成的資料給他安裝到預定的目錄中,就完成安裝啦!

此外,如果安裝成功, 並且是安裝在獨立的一個目錄中,例如 /usr/local/packages 這個目錄中好了,那麼你就必需手動的將這個軟體的 man page 給他寫入 /etc/man.config 裡面去。即写入下面这行内容

MANPATH /usr/local/ packages/man

所以囉,通常我們會建議大家將自己安裝的軟體放置在 /usr/local 下,至於原始碼 (Tarball)則建議放置在 /usr/local/src (src 為 source 的縮寫)底下。因为在預設的情況下, man 會去搜尋 /usr/local/man 裡面的說明文件, 因此,如果我們將軟體安裝在 /usr/local 底下的話,那麼自然安裝完成之後, 該軟體的說明文件就可以被找到了。

一般來說 configure 設定參數較重要的就是那個 --prefix=/path 了,--prefix 後面接的路徑就是『這個軟體未來要安裝到那個目錄去?』如果你沒有指定 --prefix=/path 這個參數,通常預設參數就是 /usr/local。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: