有些時候你會想要使用不同的函式庫來編譯你的程式,這一節會解釋如何達成這個目的。 我會使用在前兩節中所使用的目錄與安裝名稱,記得要改變這些名稱以符合你的設定。
在你開始編譯任何會在開機時用到的程式之前,
假如程式是動態連結,並且是在 non-root partition 被 mount 之前使用的話,
那所有連結用的函式庫都必須在 root partition 上。
在前面的安裝程序裡,我們將 glibc 安裝成主要的函式庫,
而舊的函式庫仍然保留在 /lib
,
/lib
會在 root partition 上,
也就是說,所有在開機時會用到的程式都能正常工作。
然而,若你的 /usr
是在不同的 partition 上,
且把 glibc 當成測試用的函式庫,安裝在 /usr/i486-linuxglibc2
,
那除非 /usr
已經被 mount,否則所有你用 glibc 編譯的程式都將不能使用。
要用測試安裝的 glibc 編譯程式,
你必須要將 include 路徑重設成 glibc 的 include 路徑。
指定 "-nostdinc" 會取消正常 include 路徑,
而 "-I/usr/i486-linuxglibc2/include" 則會指到 glibc 的 include
目錄,
你也必須要指定 gcc 標準 include 目錄,
通常是 /usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2/include
。
(這裡假設你安裝測試的函式庫在 i486-linuxglibc2,
而 gcc 的版本是 2.7.2.2)
要用測試安裝的 glibc 來連結,你必須指明 gcc 設定, 這是由 "-b i486-linuxglibc2" 這選項來達成。
對大部份的程式,
你可以簡單的將其加入 makefile 的
$CFLAGS
與
$LDFLAGS
選項中:
CFLAGS = -nostdinc -I/usr/i486-linuxglibc2/include -I/usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2/include -b i486-linuxglibc2
LDFLAGS = -b i486-linuxglibc2
假如你使用 configure 這個 script,在執行 configure 之前,
定義 shell 變數 $CFLAGS
與 $LDFLAGS
(在 csh/tcsh 下用 env/setenv
在 sh/bash/其它之下用 set/export)。
這樣產生的 makefile 應該會包含正確的 $CFLAGS
與
$LDFLAGS
。
不過並非所有的 configure scrpt 都會去取得這些變數,
所以在執行完 configure 之後,你還是要檢查一下 makefile,
假如需要的話,手動修改它。
假如你所要編譯的程式只呼叫 gcc,(而不直接呼叫 cpp 或 binutils) 你可以使用以下的 script,省去每次指定所有選項的麻煩:
#!/bin/bash
/usr/bin/gcc -b i486-linuxglibc2 -nostdinc \
-I/usr/i486-linuxglibc2/include \
-I/usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2/include "$@"
編譯時你可以使用這個 script 而不是 gcc。
當你已經將 glibc 安裝成主要的函式庫之後,又想用舊的函式庫來編譯程式的時候, 你必須將 include 路徑重設成舊的路徑。 指定 "-nostdinc" 將會使預設的路徑無效, 而 "-I/usr/i486-linuxlibc5/include" 會將 include 的路徑指到舊函式庫的 include 路徑, 你也必須要指定 "-I/usr/lib/gcc-lib/i486-linuxlibc5/2.7.2.2/include" 以含入 gcc 所需的 include 檔。 注意要視你新的目錄與 gcc 版本來調整這些路徑。
要用舊的 libc 來做連結,你必須指定 gcc 所用的架構。 這是由 "-b i486-linuxlibc5" 這個選項所指定的。
對大部份的程式,你可以簡單的將這些選項加入到 makefile 裡的
$CFLAGS
與
$LDFLAGS
選項裡:
CFLAGS = -nostdinc -I/usr/i486-linuxlibc5/include -I/usr/lib/gcc-lib/i486-linuxlibc5/2.7.2.2/include -b i486-linuxlibc5
LDFLAGS = -b i486-linuxlibc5
假如你使用 configure 這個 script,
在執行 configure 之前,
定義 shell 變數 $CFLAGS
與 $LDFLAGS
(在 csh/tcsh 下用 env/setenv
在 sh/bash/或其它之下用 set/export)。
這樣產生的 makefile 應該會包含正確的 $CFLAGS
與
$LDFLAGS
。
不過並非所有的 configure scrpt 都會去取得這些變數,
所以在執行完 configure 之後,你還是要簡檢查一下 makefile,
假如需要的話,手動修改它。
假如你所要編譯的程式只呼叫 gcc,(而不直接呼叫 cpp 或 binutils) 你可以使用以下的 script,省去每次指定所有選項的麻煩:
#!/bin/bash
/usr/bin/gcc -b i486-linuxlibc5 -nostdinc \
-I/usr/i486-linuxlibc5/include \
-I/usr/lib/gcc-lib/i486-linuxlibc5/2.7.2.2/include "$@"
編譯時你可以使用這個 script 而不是 gcc。