linux下源碼安裝軟體

來源:互聯網
上載者:User
本帖最後由 奶茶dsk 於 2010-7-8 01:01 編輯

在linux下的很多軟體都是通過源碼包方式發布的,這樣做對於終端使用者而言,雖然相對於二進位軟體包,配置和編譯起來繁瑣點,但是它的可移植性卻好得多,針對不同的體繫結構,軟體開發人員往往僅需發布同一份源碼包,不同的終端使用者經過編譯就可以正確運行,這也是非常符合c語言的設計哲學的,一次編寫,到處編譯麼,而常見的二進位包,比如rpm和deb,軟體開發人員必須為每種特定的平台定製好專門的軟體包,這個通過rpm檔案的尾碼名就可以初見端倪,比如ppc,sparc,i386之類,在這裡不做過多的陳述,其實源碼安裝軟體遠沒有很多朋友想象的那麼複雜,下面我在這裡儘可能詳細的做一些陳述,如有謬誤,歡迎朋友們拍磚!

安裝的具體步驟:

  1. $ tar zxvf XXXX.tar.gz (or tar jxvf XXXX.tar.bz2)
  2. $ cd XXXX
  3. $ ./configure
  4. $ make
  5. # make install

  1. $ make clean

安裝完成後用來清理臨時檔案

  1. # make uninstall

用來卸載軟體

解壓:

        最常見源碼包的就兩種(XXXX.tar.gz or XXXX.tar.bz2),其實這些源碼包都是由2個工具壓縮而成的,tar.gz結尾的檔案用到的工具是tar和gunzip,而tar.bz2結尾的檔案所使用的工具是tar和bzip2,之所以這樣做是因為,tar僅僅能夠打包多個檔案但是沒有壓縮的功能,而gz和bz2卻剛好相反,僅能夠壓縮單個檔案,這樣我們常見的源碼包實際上是通過tar先將不同的源檔案打包,然後再通過gunzip或者bzip2壓縮後發布的,當然這兩個步驟可以通過一條命令實現:

  1. $ tar zcvf XXXX.tar.gz XXXX(or tar jcvf XXXX.tar.bz2 XXXX)

解壓的相關命令如下:

  1. $ tar zxvf XXXX.tar.gz
  2. $ tar jxvf XXXX.tar.bz2


./configure:

        解壓完成就正式開始安裝了(補充一點,開始configure之前,如有必要,請使用patch工具為源碼打上相應的補丁),首先跳轉到源碼的解壓目錄,眾所周知,開始configure前還是應該仔細閱讀源碼目錄下的README或者INSTALL檔案,好多安裝中的注意事項在這裡都有所羅列,configure實際上是一個指令檔,在目前的目錄中鍵入"./configure",shell就會運行目前的目錄下的configure指令碼,有一點必須說明,在整個configure過程,其實編譯尚未進行,configure僅僅是做編譯相關的準備工作,它主要對您當前的工作平台做一些依賴性檢查,比如編譯器是否安裝,連接器是否存在,如果在檢測的過程沒有任何錯誤,你很幸運,configure指令碼會在目前的目錄下產生下一步編譯連結所要用到的另一個檔案Makefile,當然configure支援及其豐富的命令列參數,可以鍵入"./configre --help"擷取具體的資訊,最常用的恐怕就是:

  1. $ ./configure --prefix=/opt/XXX

它用來設定軟體的安裝目錄.

make:

        如果configure過程正確完成,那麼在源碼目錄,會產生相應的Makefile檔案,Makefile檔案簡單來說包括的是一組檔案依賴關係以及編譯連結的相關步驟,事實上真正的編譯連結工作也不是make所做的,make只是一個通用的工具,一般情況下,make會根據Makefile中的規則調用合適的編譯器編譯所有與當前軟體相依賴的源碼,產生所有相關的目標檔案,最後再使用連結器產生最終的可執行程式:

  1. $ make


make install:

        當上面兩個步驟正確完成,代表著編譯連結過程已經完全結束,最後要做的就是將可執行程式安裝到正確的位置,在這個步驟,普通使用者可能沒有相關目錄的操作許可權,臨時切換到root是一個不錯的選擇,"install"只是Makefile檔案中的一個標號,"make install"代表著make工具執行Makefile檔案中"install"標號下的所有相關操作,如果在configure階段沒有使用"--prefix=/opt/XXX"指定應用程式的安裝目錄,那麼應用程式一般會被預設安裝到/usr/local/bin,如果/usr/local/bin已經存在於您的PATH中,那麼安裝已經基本結束:

  1. #make install


make clean:
make uninstall:

        這兩個步驟只是安裝的後續操作,有一點必須注意,"clean"和"uninstall"也是Makefile檔案中相應的兩個標號,執行這兩個步驟的時候Makefile檔案必要保留,"make clean"用來清除編譯串連過程中的一些臨時檔案,"make uninstall"是卸載相關應用程式,與make install類似,make uninstall也需要切換到root執行,不過"uninstall"標號在好多Makefile中都被省略掉了,朋友們完全可以自己在相應的Makefile檔案一探究竟.

Why?
        在這裡我嘗試著解釋一下上面這些步驟存在的理由,從C語言的角度來說,一個程式從源碼到正確產生相關的可執行檔,下面這些部分必不可少:源檔案,編譯器,彙編器,連接器,依賴庫,通過上面幾個步驟,朋友們應該已經知道,真正執行編譯連結操作的步驟只有一個(make),那其他步驟存在的理由何在?
        有一點是肯定的,我在自己的電腦上使用C語言寫一些自娛自樂的小程式,也沒有用到"configure or make install"之類的命令,頂多自己寫個Makefile管理源檔案的依賴關係,可是軟體開發人員不同,他必須考慮到軟體的可移植性,他開發的軟體不能僅僅就在他自己的pc上跑吧?不同的平台可能連硬體體繫結構都不同,這樣就導致了Makefile的不可移植性,為瞭解決這個問題,開發人員通常使用autoconf之類的工具產生相應的configure指令碼,而configure指令碼就是用來屏蔽相應的平台差異,從而正確產生Makefile檔案,然後make再根據configure的勞動成果(Makefile)完成編譯連結工作.       
        至於"install or clean or uninstall",也只是對應著Makefile檔案中不同的規則,關於Makefile的詳細資料,朋友們可以自行查閱相關的文檔.

一個例子
        下面是我在自己的pc機上源碼安裝tar工具的過程,權當做是上面這些步驟的一個具體案例吧:

  1. [root@localhost ~]# head -n 1 /etc/issue
  2. CentOS release 5.4 (Final)
  3. [root@localhost ~]# uname -sr
  4. Linux 2.6.18-164.el5
  5. [root@localhost ~]# gcc --version
  6. gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-46)
  7. Copyright (C) 2006 Free Software Foundation, Inc.

這個是我的系統資訊。

  1. [root@localhost tools]# pwd
  2. /root/tools
  3. [root@localhost tools]# ls
  4. tar-1.23.tar.bz2
  5. [root@localhost tools]# tar jxvf tar-1.23.tar.bz2
  6. ......
  7. [root@localhost tools]# ls
  8. tar-1.23  tar-1.23.tar.bz2
  9. [root@localhost tools]# cd tar-1.23
  10. [root@localhost tar-1.23]# ls
  11. ABOUT-NLS     build-aux   configure     gnu      Makefile.am  po       src
  12. acinclude.m4  ChangeLog    configure.ac  INSTALL  Makefile.in  README   tests
  13. aclocal.m4    ChangeLog.1  COPYING       lib      Make.rules   rmt      THANKS
  14. AUTHORS       config.h.in  doc           m4       NEWS         scripts  TODO

解壓原檔案包,可以發現其中包括了configure指令碼和README檔案。

  1. [root@localhost tar-1.23]# mkdir -v ~/tar
  2. mkdir: 已建立目錄 “/root/tar”
  3. [root@localhost tar-1.23]# ./configure --prefix=/root/tar
  4. ......
  5. [root@localhost tar-1.23]# echo $?
  6. 0

建立軟體安裝目錄,並configure,檢查configure返回結果,為0代表運行成功.

  1. [root@localhost tar-1.23]# ls -F
  2. ABOUT-NLS     ChangeLog.1     configure.ac  m4/          po/       tests/
  3. acinclude.m4  config.h        COPYING       Makefile    README    THANKS
  4. aclocal.m4    config.h.in     doc/          Makefile.am  rmt/      TODO
  5. AUTHORS       config.log      gnu/          Makefile.in  scripts/
  6. build-aux/    config.status*  INSTALL       Make.rules   src/
  7. ChangeLog     configure*      lib/          NEWS         stamp-h1

可以看到Makefile檔案已經被成功建立.

  1. [root@localhost tar-1.23]# less Makefile | grep install:
  2.            || { echo "ERROR: files left after uninstall:" ; /
  3. install: install-recursive
  4. uninstall: uninstall-recursive

在建立的Makefile中存在install和uninstall標號

  1. [root@localhost tar-1.23]#make
  2. ......
  3. [root@localhost tar-1.23]#echo &?
  4. 0

make成功

  1. [root@localhost tar-1.23]#make install
  2. ......
  3. [root@localhost tar-1.23]# ls /root/tar
  4. bin  libexec  sbin  share
  5. [root@localhost tar]# cd /root/tar/bin
  6. [root@localhost bin]# ls
  7. tar
  8. [root@localhost bin]# ./tar --help
  9. ......
  10. [root@localhost tar-1.23]#echo &?
  11. 0

安裝並簡單測試成功

再囉嗦2句:
1.確切的明白自己想要做什麼以及正在做什麼.
2.開源界名言"RTFM"!!

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
       
一個補充:

可是我的沒有./configure,也不能用make是怎麼回事呢,樓主?是不是linux版本不對呢?
846969004 發表於 2010-7-1 18:03

2種可能:
1,您下載的不是源碼包,有可能是可以直接啟動並執行二進位包
2,配置指令碼不是configure

2種情況都可以在README或INSTALL文檔中一探究竟,,
奶茶dsk 發表於 2010-7-1 21:05

第二種我見過,7-zip沒有配置指令碼,直接make就行了
pl_014 發表於 2010-7-3 12:56

再次強調一下README!

 

 

本帖轉自 :http://www.linuxdiyf.com/viewarticle.php?id=181890

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.