1. 程式人生 > 其它 >linux軟體安裝(一)——原始碼安裝

linux軟體安裝(一)——原始碼安裝

Linux軟體簡介

Linux上幾乎所有的軟體都經過了GPL授權,因此幾乎所有的軟體都會提供原始碼。 而一個軟體要在Linux上執行,必須是二進位制檔案,因此當我們拿到軟體原始碼後,需要將它編譯成二進位制檔案才能在Linux上執行。

軟體編譯過程

將原始碼編譯成可供Linux執行的二進位制檔案一共需要兩步: 1. 使用gcc編譯器將原始碼編譯成目標檔案 2. 再次使用gcc編譯器將目標檔案連結成二進位制檔案

這過程看似簡單,實則不然。一個軟體的原始碼往往被封裝在多個原始檔中,此外這些檔案有錯綜複雜的依賴關係,編譯需要嚴格按照指定的順序進行,這無疑增加了編譯的難度。好在make命令可以幫助我們簡化編譯過程。

整個編譯過程被濃縮在Makefile檔案中,當執行make命令時,make會去當前目錄中尋找Makefile檔案,並根據該檔案中的要求完成整個編譯過程。

而Makefile檔案由configure命令產生。當執行configure命令時,configure會根據當前系統環境動態生成一個適合本系統的Makefile檔案,供make命令使用。

Linux原始碼安裝步驟

  1. 獲取原始碼 將軟體的原始碼下載至/usr/local/,並解壓。
  2. 檢視INSTALL與README檔案 解壓後檢視INSTALL與README檔案,這兩個檔案中詳細介紹了本軟體的安裝方法和注意事項。
  3. 建立Makefile檔案 執行configure命令,生成Makefile檔案。
  4. 編譯 執行make clean;make命令將原始碼編譯成二進位制檔案。 PS:make clean命令用來清除上一次編譯生成的目標檔案。這個步驟可有可無,但為了確保編譯的成功,還是加上為好。防止由於軟體中含有殘留的目標檔案導致編譯失敗。
  5. 安裝 執行make install命令將上一步編譯好的二進位制檔案安裝到指定的目錄中去。

安裝演示

1.進入/usr/local/,並建立memcached目錄:

cd /usr/local/
mkdir memcached

2.下載memcached的原始碼

wget http://memcached.org/files/memcached-1.4.29.tar.gz

3.解壓原始碼

tar -zxvf memcached-1.4.29.tar.gz

4.執行configure,生成Makefile檔案

./configure --prefix=/usr/local/memcached/

此時當前目錄下將會生成一個Makefile檔案。

  • 注意:–prefix引數指定軟體安裝目錄。當執行make install命令時,會將軟體安裝在此路徑中。

5.執行make,編譯原始碼

make clean; make

此時make會讀取Makefile檔案,將原始碼編譯成二進位制檔案,並存放在當前目錄下。

6.執行make install,將軟體安裝至指定目錄

make install

此時二進位制檔案會被安裝到先前configure prefix引數設定的路徑中去。 安裝完成!

Linux函式庫

1. 什麼是“Linux函式庫”?

執行在Linux上的軟體時常會呼叫Linux核心的某些功能或其他軟體的某些功能,那麼這些被軟體呼叫的功能稱為Linux的函式庫。軟體自身的函式庫存放在軟體安裝目錄下的lib中,而Linux的函式庫存放在/usr/lib和/usr/include中,linux核心的函式庫存放在/lib/modules中。

2. Linux函式庫的分類

Linux函式庫分為靜態函式庫 和 動態函式庫。 1. 靜態函式庫 - 副檔名:xxx.a - 在編譯時會被整合到軟體的二進位制檔案中去。因此擁有靜態函式庫的軟體較為龐大。而且當系統的函式庫更新時,引用該函式庫的所有軟體都需要重新編譯才能正常使用。這是非常麻煩的!但擁有靜態函式庫的軟體可以獨立執行。 2. 動態函式庫 - 副檔名:xxx.so - 在編譯時僅僅將函式庫的路徑整合到軟體的二進位制檔案中去。由於軟體中包含的是函式庫的路徑,因此該軟體無法獨立執行,且函式庫的路徑不能發生變化,一旦變化,該軟體將無法找到函式庫,從而無法執行!這是動態函式庫的最大缺點。但當動態函式庫更新時,軟體無需重新編譯,因此更新較為方便,這是動態函式庫的最大優點。

目前大部分軟體均使用動態函式庫,就是因為動態函式庫在更新時體現出的優勢。

3. 提升函式庫讀取效率

軟體在執行某些功能時需要呼叫函式庫中的函式,而函式庫又是以檔案的形式存放在外設上。那麼如果將函式庫存放在記憶體中,那麼將會大大提升讀取速度。在Linux中,可以使用ldconfig命令將指定的函式庫載入進記憶體。具體步驟如下: 1. 在/etc/ld.so.conf中設定需要載入進記憶體的函式庫 2. 使用ldconfig命令使配置生效

4. 檢視軟體的動態函式庫

使用ldd命令即可檢視指定軟體所使用的全部動態函式庫。

[root@iZ28st035lsZ usr]# ldd /usr/bin/passwd 
    linux-vdso.so.1 =>  (0x00007fffa2bfd000)
    libuser.so.1 => /usr/lib64/libuser.so.1 (0x0000003edac00000)
    libcrypt.so.1 => /lib64/libcrypt.so.1 (0x0000003edc400000)
    libgobject-2.0.so.0 => /lib64/libgobject-2.0.so.0 (0x0000003edcc00000)
    libgmodule-2.0.so.0 => /lib64/libgmodule-2.0.so.0 (0x0000003edf800000)
    libdl.so.2 => /lib64/libdl.so.2 (0x0000003eda800000)
    libglib-2.0.so.0 => /lib64/libglib-2.0.so.0 (0x0000003edc800000)
    libpopt.so.0 => /usr/lib64/libpopt.so.0 (0x0000003edd400000)
    libpam_misc.so.0 => /lib64/libpam_misc.so.0 (0x0000003edc000000)
    libaudit.so.0 => /lib64/libaudit.so.0 (0x0000003edd000000)
    libselinux.so.1 => /lib64/libselinux.so.1 (0x0000003edb400000)
    libc.so.6 => /lib64/libc.so.6 (0x0000003eda400000)
    libpam.so.0 => /lib64/libpam.so.0 (0x0000003edf400000)
    librt.so.1 => /lib64/librt.so.1 (0x0000003edbc00000)
    /lib64/ld-linux-x86-64.so.2 (0x0000003ed9c00000)
    libsepol.so.1 => /lib64/libsepol.so.1 (0x0000003edb800000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003edb000000)