GB | BIG5
|
| 首頁 > 編程技術 > C/C++ > 正文 |
 |
| Glibc 2 HOWTO 中文版 -- 5. 安裝成主要函式庫 |
| 本文出自: 譯者 Allex Juang, allex@ms2.accmail.com (2001-06-22 18:08:00) |
這一節的內容是關於將 glibc2 安裝成你的主要 C 函式庫。 任何你編譯的新程式都將會連結到這一個函式庫, 除非你用了特殊的編譯選項來連結到其它的版本。
假如你是用 RedHat 或 Debian 並且已下載相關的 rpm 或 deb 檔, 請參閱 RedHat 或 Debian 的安裝說明,你可以直接跳過這一節。
5.1 由原始碼編譯函式庫
這一節解釋如何由原始碼編譯 glibc 2 與附加套件。 如果你想要改變最佳化與組態選項或使用額外的套件,那你就必須編譯函式庫。
需求
約 150 MB 的磁碟空間
GNU make 3.75
gcc >= 2.7.2 (最好是 2.7.2.1)
binutils 2.8.1 (假如是 alpha 你需要 snapshot)
bash 2.0
autoconf 2.12 (假如你更動了 configure.in)
texinfo 3.11
在一安裝有 64MB 記憶體的 i586@133 機器上, 編譯完整的函式庫與附加套件大約需要三個小時。 而在 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 才能找到這些附加套件。
設定組態
在 glibc-2.0.6 的目錄底下,建立一個新的目錄 compile, 並且 cd 到 compile 底下,所也的工作都會在這個目錄中完成, 這會簡化後續的清除工作。 (發展者似乎並未讓 'make clean' 作得很好)
mkdir compile
cd compile
執行 ../configure。 要使用附加套件你必需用 --enable-add-ons 來指定, 例如 --enable-add-ons=linuxthreads,crypt,localedata。 也許你也會想要指定安裝的目錄,要符合 linux 標準架構, 指定為 --prefix=/usr。 (當在 linux 系統上 prefix 被設為 /usr, configure 知道要調整其它的路徑, 好將 libc.so 以及其它重要的函式庫放到 /lib) 完整的 configure 命令如下:
../configure --enable-add-ons=linuxthreads,crypt,localedata --prefix=/usr
編譯
要編譯與驗証, 執行:
make
make check
5.2 準備安裝
無論是由原始碼編譯或是預先編譯好的版本,你現在必需移動某些檔案來迎接新的函式庫。 任何新編譯的程式會被連結到 glibc,但是舊有靜態連結的程式仍然倚靠 libc 5, 所以你不能只是覆蓋掉舊有的版本。
建立一個新的目錄來放置舊檔案:
mkdir -p /usr/i486-linuxlibc5/lib
舊的標頭檔必需從 /usr/include 移開:
mv /usr/include /usr/i486-linuxlibc5/include
建立一個新的 include 目錄,並且設定到其它 include 目錄的連結:
mkdir /usr/include
ln -s /usr/src/linux/include/linux /usr/include/linux
ln -s /usr/src/linux/include/asm /usr/include/asm
ln -s /usr/X11R6/include/X11 /usr/include/X11
ln -s /usr/lib/g++-include /usr/include/g++
這些連結須要視你的系統而稍作調整。 最少在 Slackware 中,g++ 標頭檔案在 /usr/local/g++-include, 而 Debian 卻放在 /usr/include/g++, 並且將 /usr/lib/g++-include 連結到 /usr/include/g++。 在後者的情形,你也許會想要將原始的 g++ include 目錄移回到 /usr/include。
回存所有額外的標頭檔與連結。 某些非標準的函式庫會將檔案放至 /usr/include, 或是在 /usr/include 放置一連結到它們的 include 目錄下。 這些檔案與連結必須回存,如此才可以正確的使用這些額外的函式庫。
將你的新函式庫路徑 (例如 /usr/i486-linuxlibc5/lib) 加入到 /etc/ld.so.conf 的頂端。 你最好要有 ld.so 1.8.8 或是更新的版本, 以避免在安裝完 glibc 之後出現一些奇怪的訊息。
搬移或復制所有的舊函式庫到新的目錄。
mv /usr/lib/libbsd.a /usr/i486-linuxlibc5/lib
mv /usr/lib/libc.a /usr/i486-linuxlibc5/lib
mv /usr/lib/libgmon.a /usr/i486-linuxlibc5/lib
mv /usr/lib/libm.a /usr/i486-linuxlibc5/lib
mv /usr/lib/libmcheck.a /usr/i486-linuxlibc5/lib
mv /usr/lib/libc.so /usr/i486-linuxlibc5/lib
mv /usr/lib/libm.so /usr/i486-linuxlibc5/lib
cp /lib/libm.so.5.* /usr/i486-linuxlibc5/lib
cp /lib/libc.so.5.* /usr/i486-linuxlibc5/lib
假如你的 /usr 與 / 是在不同的 partition 上, 那 libm.so.5 與 libc.so.5 應該用復制的非搬移, 因為一些用來啟動 linux 的程式會需要這兩個函式庫, 因此必須要位在 root partition。
將 /usr/lib/*.o 移到新的目錄下。
mv /usr/lib/crt1.o /usr/i486-linuxlibc5/lib
mv /usr/lib/crti.o /usr/i486-linuxlibc5/lib
mv /usr/lib/crtn.o /usr/i486-linuxlibc5/lib
mv /usr/lib/gcrt1.o /usr/i486-linuxlibc5/lib
在你的函式庫移動後, 更新 library cache。
ldconfig -v
5.3 由預先編譯好的套件安裝
如果你是由一已預先編譯好的 glibc 安裝, 你必須:
cd /
gzip -dc glibc-2.0.bin.i386.tar.gz | tar tvvf -
gzip -dc glibc-crypt-2.0.bin.i386.tar.gz | tar tvvf -
ldconfig -v
如果你用的是不同的系統架構或是版本,請置換適當的檔名。
5.4 由原始碼安裝
要由原始碼安裝, 執行:
make install
ldconfig -v
5.5 更新 gcc specs
安裝的最後一步 (不管你是由預先編譯好的套件或是由原始碼安裝) 是更新 gcc 的 spec 檔, 讓你可以正確的連結你的程式。 要知道 gcc 所用的是那一個 spec 檔, 如下輸入:
% 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-linuxlibc5
到原先的目錄與版本目錄下:
cd /usr/lib/gcc-lib/i486-unknown-linux/2.7.2.2
並修改在同一目錄下的 specs。 將這檔案中的 /lib/ld-linux.so.1 改成 /lib/ld-linux.so.2, 並且要將所有的 %{...:-lgmon} 表示式刪除, 因為 glibc 不使用 gmon 函式庫來做 profiling。 你可以在 Specs 檔□例 找到一份 specs 檔的□例。
5.6 測試你的安裝
要測試安裝是否正確, 請建立 glibc.c 如下:
#include
main()
{
printf("hello world!\n");
}
並且 compile 這個程式:
% gcc glibc.c -o glibc
使用 ldd 來查証這個程式是連結到 glibc2 而非你的舊 libc:
% ldd glibc
libc.so.6 => /lib/libc.so.6 (0x4000e000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
假如這個程式可以通過 compile,並且在執行後產生 "hello world!" 的輸出,那麼表示已經安裝成功。
(http://www.fanqiang.com)
進入【UNIX論壇】
|
|
| 相關文章 |
Glibc 2 HOWTO 中文版 -- 10. 雜項 (2001-06-23 07:05:01) Glibc 2 HOWTO 中文版 -- 9. Specs 檔□例 (2001-06-22 22:08:00) Glibc 2 HOWTO 中文版 -- 8. 報告臭虫 (2001-06-22 21:04:00) Glibc 2 HOWTO 中文版 -- 7. 編譯 C++ 程式 (2001-06-22 20:10:00) Glibc 2 HOWTO 中文版 -- 6. 使用非主要的 C 函式庫編譯程式 (2001-06-22 19:00:00) Glibc 2 HOWTO 中文版 -- 5. 安裝成主要函式庫 (2001-06-22 18:08:00) Glibc 2 HOWTO 中文版 -- 4. 安裝成測試用的函式庫 (2001-06-22 17:04:00) Glibc 2 HOWTO 中文版 -- 3. 取得函式庫 (2001-06-22 16:10:00) Glibc 2 HOWTO 中文版 -- 2. 選擇你的安裝方式 (2001-06-22 15:00:00) Glibc 2 HOWTO 中文版 -- 1. 簡介 (2001-06-22 14:08:00)
|
|
|
|
 |
★ 樊強制作 歡迎分享 ★ |