Next Previous Contents

4. 安裝成測試用的函式庫

這一節的內容是關於如何將 glibc 2 安裝成測試用的函式庫。 所有編譯的程式都連結到你目前的函式庫, 除非你給了某些額外的參數才會連結到新的函式庫。 由於路徑被編譯到某些檔案中,你需要由原始碼來安裝這函式庫。

4.1 編譯與安裝

需求

在一台安裝有 64MB 記憶體 i586@133 的機器上, 編譯完整的函式庫 (包括附加套件) 大約須要 3 小時。 而在 i686@200 則須約一個半小時。

解開原始碼

你必需由 archive 中取出原始碼。如此才能編譯它,最好的方式如下:

 tar xzf glibc-2.0.6.tar.gz
 cd glibc-2.0.6
 tar xzf ../glibc-linuxthreads-2.0.6.tar.gz
 tar xzf ../glibc-crypt-2.0.6.tar.gz
 tar xzf ../glibc-localedata-2.0.6.tar.gz
 
這會將 linuxthreads、 crypt 與 localedata 等目錄放至 glibc-2.0.6 的目錄底下, 如此 configure 才可以找到這些 add-ons。

設定組態

在 glibc-2.0.6 的目錄底下,建立一個新的目錄 compile,並且 cd 到 compile 底下, 所有的工作都會在這個目錄中完成,這會簡化後續的清除工作。 (發展者似乎並未讓 'make clean' 作得很好)

 mkdir compile
 cd compile
 
執行 ../configure。 要使用父加套件,你必需用 --enable-add-ons 指定, 例如說 --enable-add-ons=linuxthreads,crypt,localedata。

你也必需指定要安裝的目錄,/usr/i486-linuxglibc2 是個不錯的選擇, 這樣的 configure 命令如下:

 ../configure --enable-add-ons=linuxthreads,crypt,localedata --prefix=/usr/i486-linuxglibc2
 

編譯與安裝

要編譯與驗證,執行

 make
 make check
 
假如 'make check' 成功了,安裝函式庫:
 make install
 

4.2 更新 dynamic loader

  1. 建立連結, 從 ld.so/lib/ld-linux.so.2
     ln -s /usr/i486-linuxglibc2/lib/ld-linux.so.2 /lib/ld-linux.so.2
     
    
    當一個檔案連結時,這個函式庫是唯一一個位置固定的。 當穩定的版本出現的時候, 在 /lib 使用連結也會使得將 glibc 升級為主要函式庫時更為輕鬆。
  2. 修改 /etc/ld.so.conf。 你需要增加新的函式庫所在的路徑到檔案的最後, 這路徑應該是 <prefix>/lib。 假如用以上的選擇就應該是 /usr/i486-linuxglibc2/lib。 在你修改了 /etc/ld.so.conf 之後,執行:
     ldconfig -v
     
    

4.3 設定 gcc

安裝的最後一步是更新 /usr/lib/gcc-lib 以使 gcc 知道如何使用新的函式庫。 首先,你需要複製目前的組態,要知道目前的組態,使用 gcc 的 -v 選項:

 % gcc -v
 Reading specs from /usr/lib/gcc-lib/i486-unknown-linux/2.7.2.2/specs
 gcc version 2.7.2.2
 
這裡,i486-unknown-linux 是目前所用的系統,2.7.2.2 則是目前版本。 你需要將 /usr/lib/gcc-lib/<系統> 複製到新的測試系統目錄:
 cd /usr/lib/gcc-lib/
 cp -r i486-unknown-linux i486-linuxglibc2
 
到你的新系統目錄以及版本目錄下:
 cd /usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2
 
修改目錄下的 specs。在這檔案中, 將 /lib/ld-linux.so.1 換成 /lib/ld-linux.so.2, 你也必需要移去檔案中所有的 %{...:-lgmon} 表示式, 因為 glibc 不使用 gmon 函式庫來做 profile。 你可以在 Specs 檔範例找到一個範例。

4.4 更新標頭檔連結

你需要在你的 include 目錄下建立連結到其它的 include 目錄:

 cd /usr/i486-linuxglibc2/include
 ln -s /usr/src/linux/include/linux
 ln -s /usr/src/linux/include/asm
 ln -s /usr/X11R6/include/X11
 
也許你有其它的函式庫,例如說 ncurse, 而這些函式庫會需要它們自己的標頭檔, 你應該從 /usr/include 複製或連結這些檔案。 (有些函式庫需要重新用 glibc2 來 compile,在這種情形下, 只要編譯並且安裝到 /usr/i486-linuxglibc2)

4.5 測試你的安裝

要測試安裝是否成功,建立一檔案 glibc.c 如下:

 #include <stdio.h>

 main()
 {
     printf("hello world!\n");
 }
 
用 "-b <安裝目錄> -nostdinc -I<安裝目錄>/include -I/usr/lib/gcc-lib/<新系統目錄>/<gcc 版本>/include" 的選項編譯:
 % gcc -b i486-linuxglibc2 -nostdinc -I/usr/i486-linuxglibc2/include -I/usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2/include glibc.c -o glibc
 
使用 ldd 確定程式是用 glibc2 連結,而非舊有的 libc:
 % ldd glibc
 libc.so.6 => /usr/i486-linuxglibc2/lib/libc-2.0.5.so (0x4000d000)
 /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
 
如果通過編譯,連結也確定, 並且執行時也產生 "hello world!" 的輸出,那麼安裝就成功了。


Next Previous Contents