閱讀475 返回首頁    go 阿裏雲 go 技術社區[雲棲]


《Linux From Scratch》第二部分:準備構建 第五章:構建臨時文件係統- 5.7. Glibc-2.21

             Glibc 軟件包包括主要的 C 庫。這個庫提供了基本的內存分配、文件夾搜素、讀寫文件、字符串處理、模式匹配、算術等等例程。

大概編譯時間: 3.9 SBU
所需磁盤空間: 670 MB

5.7.1. 安裝 Glibc

在某些情況下,尤其是 LFS 7.1,rpc(譯者注: Remote Procedure Calling, 遠程過程調用)頭文件並沒有正確安裝。測試查看是否安裝在了主機係統中,如果沒有的話安裝它:

if [ ! -r /usr/include/rpc/types.h ]; then
  su -c 'mkdir -pv /usr/include/rpc'
  su -c 'cp -v sunrpc/rpc/*.h /usr/include/rpc'
fi

修複軟件包中一個會影響 32 位架構的回滾:

sed -e '/ia32/s/^/1:/' \
    -e '/SSE2/s/^1://' \
    -i  sysdeps/i386/i686/multiarch/mempcpy_chk.S

Glibc 手冊建議在源文件夾之外的一個專用文件夾中編譯 Glibc:

mkdir -v ../glibc-build
cd ../glibc-build

下一步,準備編譯 Glibc:

../glibc-2.21/configure                             \
      --prefix=/tools                               \
      --host=$LFS_TGT                               \
      --build=$(../glibc-2.21/scripts/config.guess) \
      --disable-profile                             \
      --enable-kernel=2.6.32                        \
      --with-headers=/tools/include                 \
      libc_cv_forced_unwind=yes                     \
      libc_cv_ctors_header=yes                      \
      libc_cv_c_cleanup=yes

配置選項的含義:

--host=$LFS_TGT, --build=$(../glibc-2.21/scripts/config.guess)

這些選項的組合效果是 Glibc 的構建係統配置它自己用 /tools 裏麵的交叉鏈接器和交叉編譯器交叉編譯自己。

--disable-profile

編譯庫但不包含分析信息。如果臨時工具需要分析信息則忽略此選項。

--enable-kernel=2.6.32

這告訴 Glibc 編譯能支持 Linux 2.6.32 以及之後的內核庫。更早的內核版本不受支持。

--with-headers=/tools/include

告訴 Glibc 利用剛剛安裝在 tools 文件夾中的頭文件編譯自身,此能夠根據內核的具體特性提供更好的優化。

libc_cv_forced_unwind=yes

5.4,“Binutils-2.25 - 第1遍” 中安裝的鏈接器是交叉編譯的,在安裝完 Glibc 之前不能使用。由於依賴於工作的鏈接器,這意味著 force-unwind 支持的配置測試會失敗。將 libc_cv_forced_unwind=yes 變量傳遞進去告訴configure 命令 force-unwind 支持是可用的,不需要進行測試。

libc_cv_c_cleanup=yes

類似的,我們傳遞 libc_cv_c_cleanup=yes 到 configure 腳本跳過測試就完成了 C 清理支持的配置。

libc_cv_ctors_header=yes

類似的,我們傳遞 libc_cv_ctors_header=yes 到 configure 腳本跳過測試就完成了 gcc 構建器支持的配置。

在這個過程中,可能會出現下麵的警告:

configure: WARNING:
*** These auxiliary programs are missing or
*** incompatible versions: msgfmt
*** some features will be disabled.
*** Check the INSTALL file for required versions.

msgfmt 程序的缺失或者不兼容通常是無害的。這個 msgfmt 程序是 Gettext 軟件包的一部分,主機發行版應該提供了。

[Note]

注意

有報告說用 "parallel make" 編譯這個軟件包的時候會失敗。如果出現這種情況,用 "-j1" 選項重新運行 make 命令。

編譯軟件包:

make

安裝軟件包:

make install
[Caution]

警告

到了這裏,必須停下來確認新工具鏈的基本功能(編譯和鏈接)都是像預期的那樣正常工作。運行下麵的命令進行全麵的檢查:

echo 'main(){}' > dummy.c
$LFS_TGT-gcc dummy.c
readelf -l a.out | grep ': /tools'

如果一切工作正常的話,這裏應該沒有錯誤,最後一個命令的輸出形式會是:

[Requesting program interpreter: /tools/lib/ld-linux.so.2]

注意 /tools/lib、或者 64 位機器的 /tools/lib64 會以動態鏈接器的前綴出現。

如果輸出不是像上麵那樣或者根本就沒有輸出,那麼可能某些地方出錯了。調查並回溯這些步驟,找出問題所在並改正它。在繼續之前必須解決這個問題。

一旦一切都順利,清理測試文件:

rm -v dummy.c a.out
[Note]

注意

在後麵的編譯 Binutils 章節時會再一次檢查工具鏈是否正確編譯。如果 Binutils 編譯失敗,說明之前安裝 Binutils、GCC、或者 Glibc 時某些地方出現了錯誤。   


該軟件包的詳細信息在 6.9.4, “Glibc 軟件包內容”



創建者:Gerard Beekmans

編輯者:Matthew Burgess 和 Armin K.

翻譯團隊:LCTT

譯者/校對:ictlyh,dongfengweixiao,

原文鏈接        

最後更新:2017-11-07 14:34:51

  上一篇:go  《Linux From Scratch》第二部分:準備構建 第五章:構建臨時文件係統- 5.19. Diffutils-3.3
  下一篇:go  《Linux From Scratch》第二部分:準備構建 第五章:構建臨時文件係統- 5.6. Linux-3.19 API 頭文件