Linux下通過源碼編譯安裝程序(configure/make/make install的作用 )

一、程序的組成部分

Linux下程序大都是由以下幾部分組成:

二進制文件:也就是可以運行的程序文件

庫文件:就是通常我們見到的lib目錄下的文件

配置文件:這個不必多說,都知道

幫助文檔:通常是我們在Linux下用man命令查看的命令的文檔

二、Linux下程序的存放目錄

Linux程序的存放目錄大致有三個地方:

/etc, /bin, /sbin, /lib  :系統啓動就需要用到的程序,這些目錄不能掛載額外的分區,必須在根文件系統的分區上

/usr/bin,/usr/sbin,/usr/lib:操作系統核心功能,可以單獨分區

/usr/local/bin,/usr/local/sbin,/usr/local/lib,/usr/local/etc,/usr/local/man:這個用於安裝第三方程序,分別對應了二進制文件、庫文件、配置文件、幫助文檔的目錄

通常來說我們安裝程序就安裝在 /usr/local目錄下

 三、編譯安裝源程序

1、使用如下命令查看當前是否安裝了gcc編譯器,沒有可以先用yum安裝gcc

gcc --version  #查看是否安裝gcc

2、解壓源碼包,例如:

tar -xvf nginx-1.7.7.tar.gz #解壓源碼包

3、進入解壓好的源碼包:

cd nginx-1.7.7 #進入源碼包

4、執行configure文件,此文件有兩個功能:1、讓用戶選定編譯特性;2、檢查編譯環境。configure執行後將生成MakeFile文件。例如:

./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf

其中我們通過--prefix制定了安裝路徑,通過--conf-path制定了配置文件的具體位置。注意:不是所有的程序的configure參數都是一樣的 可以使用 ./configure --help查看詳細參數說明。如果該程序所依賴的庫在當前系統中沒有安裝,則會導致configure最後報錯,遇到這種情況就需要你先安裝依賴庫。

5、執行make命令,編譯程序

make

6、編譯成功後就可以安裝了,執行如下命令

make install

到此程序就算安裝完成了,但是不要忘了還有後續的配置哦

四、配置程序

1、修改PATH環境變量,以能夠識別此程序的二進制文件路徑;

修改/etc/profile文件,在文件中 添加

export PATH=$PATH:/path/to/somewhere#記得是可執行文件所在的目錄,路徑中不要包含可執行文件。

然後執行 :

source /etc/profile #是我們的修改生效  

2、默認情況下,系統搜索庫文件的路徑/lib, /usr/lib; 要增添額外搜尋路徑(注意:有的程序不提供庫文件,那就不需要此設置了)

在/etc/ld.so.conf.d/中創建以.conf爲後綴名的文件,而後把要增添的路徑直接寫至此文件中;然後執行如下命令使其生效

ldconfig

3、如果程序提供了庫文件,也會相應的提供頭文件,一般在安裝目錄的include目錄下,系統默認掃描頭文件的路徑是:/usr/include。我們可以在/usr/include下用鏈接連接到我們安裝程序的頭文件。

ln -s /usr/local/nginx/include  /usr/include/yourname

4、可能程序還提供了幫助文檔,一般是安裝目錄下的man目錄,爲了我們可以使用man命令查看我們程序的幫助文檔,我們需要:在/etc/man.config中添加一條MANPATH,指向我們的文檔目錄


configure/make/make install的作用


這些都是典型的使用GNU的AUTOCONF和AUTOMAKE產生的程序的安裝步驟。

./configure是用來檢測你的安裝平臺的目標特徵的。比如它會檢測你是不是有CC或GCC,
並不是需要CC或GCC,它是個shell腳本。

make是用來編譯的,它從Makefile中讀取指令,然後編譯。

make install是用來安裝的,它也從Makefile中讀取指令,安裝到指定的位置。

AUTOMAKE和AUTOCONF是非常有用的用來發布C程序的東西。如果你也寫程序想使用AUTOMAKE和AUTOCONF,可以參考CNGNU.ORG上的相關文章。

1、configure ,這一步一般用來生成 Makefile,爲下一步的編譯做準備,你可以通過在 configure 後加上參數來對安裝進行控制,比如

代碼:
./configure --prefix=/usr
    上面的意思是將該軟件安裝在 /usr 下面,執行文件就會安裝在 /usr/bin (而不是默認的 /usr/local/bin),
資源文件就會安裝在 /usr/share(而不是默認的/usr/local/share)。
同時一些軟件的配置文件你可以通過指定 --sys-config= 參數進行設定。
有一些軟件還可以加上 --with、--enable、--without、--disable 等等參數對編譯加以控制,
你可以通過允許 ./configure --help 察看詳細的說明幫助。

    2、make ,這一步就是編譯,大多數的源代碼包都經過這一步進行編譯
(當然有些perl或python編寫的軟件需要調用perl或python來進行編譯)。
如果 在 make 過程中出現 error ,你就要記下錯誤代碼(注意不僅僅是最後一行),
然後你可以向開發者提交 bugreport(一般在 INSTALL 裏有提交地址),
或者你的系統少了一些依賴庫等,這些需要自己仔細研究錯誤代碼。
make 的作用是開始進行源代碼編譯,以及一些功能的提供,
這些功能由他的 Makefile 設置文件提供相關的功能,比如 make install 一般表示進行安裝,
make uninstal 是卸載,不加參數就是默認的進行源代碼編譯。

make 是 Linux 開發套件裏面自動化編譯的一個控制程序,
他通過藉助 Makefile 裏面編寫的編譯規範(語法很多,類似一個可以運行的腳本程序。
反正我是看不懂,所以你也別問我怎麼編寫)。進行自動化的調用 gcc 、ld 以及運行某些需要的程序進行編譯的程序。

一般情況下,他所使用的 Makefile 控制代碼,由 configure 這個設置腳本根據給定的參數和系統環境生成。

    3、make insatll ,這條命令來進行安裝(當然有些軟件需要先運行 make check 或 make test
來進行一些測試),這一步一般需要你有 root 權限(因爲要向系統寫入文件)



Q1: 安裝原碼程序時,都要執行三步:
1./configure 
2 make 
3 make install
他們是什麼意思呀?
configure要用到gcc或cc。
但make時,需要什麼?

這些都是典型的使用GNU的AUTOCONF和AUTOMAKE產生的程序的安裝步驟。
./configure是用來檢測你的安裝平臺的目標特徵的。比如它會檢測你是不是有CC或GCC,並不是需要CC或GCC,它是個shell腳本
make是用來編譯的,它從Makefile中讀取指令,然後編譯。
make install是用來安裝的,它也從Makefile中讀取指令,安裝到指定的位置。

AUTOMAKE和AUTOCONF是非常有用的用來發布C程序的東西。如果你也寫程序想使用AUTOMAKE和AUTOCONF,可以參考CNGNU.ORG上的相關文章。

Q2:

cc和gcc又是什麼?我在rh7.3用./configure時,它老說我沒有cc,無法進行安裝,怎麼纔能有cc

cc是gcc的連接.gcc是編譯器.你安裝的時候大概是沒有選擇開發工具.你自己到光盤上找一下gcc* 吧.裝上就行了.

或者yum -y groupinstall "Development Tools" 自動安裝基本開發工具

CC是makefile裏用來定義編譯器的,是爲了方便代碼移植而設定,因爲不同的平臺可能用到不同的編譯器 
for exampe: 
x86 gcc 
mips64 gcc-mips64 

當我們把x86下的code移植到mips64時,只要將makefile裏CC=gcc改成CC=gcc-mips64 
而不需要將所有出現gcc的地方都改成gcc-mips64

Linux CC與Linux GCC的區別概括介紹。從名字上看,老的unix系統的CC程序叫做C Compiler。但GCC這個名字按GNU的說法叫做Gnu Compiler Collection。因爲gcc包含很多編譯器(C, C++, Objective-C, Ada, Fortran,and   Java)。所以它們是不一樣的,一個是一個古老的C編譯器,一個是編譯器的Gnu的編譯器的集合(Gcc裏的C編譯器比CC強大太多了,所以你沒必要用CC)。當你調用gcc時不一定是調用的C/C++編譯器,是gcc根據文件擴展名自動識別並調用對應的編譯器,具體可查閱$man gcc。

你是下載不到CC的,原因是:CC來自於昂貴的Unix系統,CC是商業軟件,要想用你需要打電話,寫訂單,而不是打開你的Browser去download。

linux下的cc是gcc的符號鏈接。可以通過$ls –l /usr/bin/cc來簡單察看.而編譯時看到的控制檯輸出CC則是一個指向gcc的變量,該變量是make程序的內建變量,就算你在Makefile中沒有CC= ,該變量也會存在,並默認指向gcc。cc的符號鏈接和變量存在的意義在於源碼的移植性,可以方便的用GCC來編譯老的用cc編譯的unix軟件,甚至連Makefile都不要改。而且也便於linux程序在unix下編譯。

近幾年的一個新情況是越來越多的unix用戶,據我所知像solaris,bsd用戶也不太使用CC了,人們都一定要裝一個gcc,用它來編譯C/C++程序。原因顯而易見,gcc足夠強大,健壯。支持估計目前爲止只有它支持的ISO c/c++ 新特性。當然你最好不要使用night版本的gcc。

Q3:

make 和 make install 中的mark是系統自帶的命令還是可執行程序文件?。   make install中,是不是可以認爲 install是mark的參數???

install 不是make的參數,而是在makefile(Makefile)中有如:install:的語句。如果用make install,那麼就執行install:後面的語句。

Q4:

./config是linux自帶的嗎?我一make ,老提示我找不到核心類庫

你去把linux的內核模塊安裝好就行了啊。。在linux的第二張盤裏

軟件的安裝方法不是一成不變的,具體的步驟看隨tarball提供的INSTALL或者README

Q5:

Makefile是什麼東東?有什麼用?怎麼用?

makefile是用於自動編譯和鏈接的,一個工程有很多文件組成,每一個文件的改變都會導致工程的重新鏈接-----但是不是所有的文件都需要重新編譯,makefile能夠紀錄文件的信息,決定在鏈接的時候需要重新編譯哪些文件! 

在unix系統下,makefile是與make命令配合使用的。

 有了這個Makefile文件,不論我們什麼時候修改了源程序當中的什麼文件,我們只要執行make命令,我們的編譯器都只會去編譯和我們修改的文件有關的文件,其它的文件它連理都不想去理的。



轉自:http://blog.csdn.net/linzhiji/article/details/6774410

http://www.linuxidc.com/Linux/2015-03/114689.htm


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章