<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 6.9\. Glibc-2.3.6 Glibc 包含了主要的C庫。這個庫提供了基本例程,用于分配內存、搜索目錄、打開關閉文件、讀寫文件、字串處理、模式匹配、數學計算等等。 **預計編譯時間:** 13.5 SBU (含測試套件)**所需磁盤空間:** 510 MB (含測試套件) ## 6.9.1\. 安裝 Glibc ### 注意 一些 LFS 基本系統之外的軟件包建議安裝 GNU libiconv 以使得數據夠能在不同編碼之間進行轉換。GNU libiconv 項目的主頁([_http://www.gnu.org/software/libiconv/_](http://www.gnu.org/software/libiconv/)) 說:"這個庫為那些沒有 iconv() 的系統或者雖然有 iconv() 卻不能與 Unicode 相互轉換的系統提供了一個能夠與 Unicode 相互轉換的實現 "。Glibc 庫中有一個 iconv() ,并且能夠與 Unicode 相互轉換,因此,LFS 系統不需要 GNU libiconv 。 Glibc 的編譯系統是高度自給自足的,即使當前編譯器 specs 文件和連接器還指向 /tools 目錄,也能正確安裝。我們在安裝 Glibc 前不能調整 specs 文件和連接器,否則 Glibc 的 autoconf 測試會失敗,從而妨礙我們創建一個干凈系統的目標。 glibc-libidn這個包加上了對國際化域名(IDN)的支持到Glibc中。許多程序支持IDN需要全的`libidn` 庫,而不是這個附加庫。(參見 [_http://www.linuxfromscratch.org/blfs/view/svn/general/libidn.html_](http://www.linuxfromscratch.org/blfs/view/svn/general/libidn.html)). 解壓縮包到Glibc的源碼目錄: ``` tar -xf ../glibc-libidn-2.3.6.tar.bz2 ``` 應用下面這個patch來修正軟件包在`sys/kd.h`之后包含`linux/types.h`導致編譯錯誤: ``` patch -Np1 -i ../glibc-2.3.6-linux_types-1.patch ``` 添加一個頭文件來定義為新內核對于inotify特性的系統調用函數: ``` patch -Np1 -i ../glibc-2.3.6-inotify-1.patch ``` 在vi_VN.TCVN locale中, `bash` 一啟動就進入一個無限循環之中。不知道這是一個 `bash` 的bug,還是一個Glibc的問題。為了避免這個問題,抑制這個locale的安裝: ``` sed -i '/vi_VN.TCVN/d' localedata/SUPPORTED ``` 當運行 **make install**,一個叫`test-installation.pl`的腳本會在我們新安裝的Glibc上做一個小的完整性測試。然而,由于我們的toolchain仍然指向`/tools`目錄,完整性測試會導致使用錯誤的Glibc。我們可以強制腳本測試我們剛安裝的腳本: ``` sed -i \ 's|libs -o|libs -L/usr/lib -Wl,-dynamic-linker=/lib/ld-linux.so.2 -o|' \ scripts/test-installation.pl ``` Glibc 文檔推薦在源碼目錄之外的一個專門的編譯目錄下進行編譯: ``` mkdir -v ../glibc-build cd ../glibc-build ``` 為編譯 Glibc 做準備: ``` ../glibc-2.3.6/configure --prefix=/usr \ --disable-profile --enable-add-ons \ --enable-kernel=2.6.0 --libexecdir=/usr/lib/glibc ``` **新配置選項的含義:** _`--libexecdir=/usr/lib/glibc`_ 把`pt_chown`程序的位置從默認的 `/usr/libexec` 改為 `/usr/lib/glibc` 。 編譯軟件包: ``` make ``` ### 重要 本節的 Glibc 測試很重要。在任何情況下都不要省略這一步。 對結果進行測試: ``` make -k check 2>&1 | tee glibc-check-log grep Error glibc-check-log ``` 在_posix/annexc_ 中,你可能會看到一個預料的錯誤(可以忽略)。另外,Glibc測試單元,多少依賴于宿主系統。下面是一些常見的錯誤: * _nptl/tst-clock2_ 和_tst-attr3_ 測試有時會出錯。 原因現在還不是很明白,可能是系統負載過重導致的。 * _math_ 測試在一些使用較老的 Intel 或 AMD 的系統上會失敗,某些優化設置也會導致該測試失敗。 * _atime_ 會在使用_`noatime`_ 選項掛載 LFS 分區時失敗(參見[節 2.4, "掛載新分區"](../chapter02/mounting.html "2.4\. 掛載新分區")),在編譯LFS過程中不要使用_`noatime`_ 選項。 * 在一些很老很慢的機器上,一些測試會由于超時而失敗。 在安裝 Glibc 的過程中,它會警告缺少 `/etc/ld.so.conf` 文件。其實這沒什么關系,不過下面的命令能修正它: ``` touch /etc/ld.so.conf ``` 安裝軟件包: ``` make install ``` 安裝inotify頭文件到系統頭文件的地方: ``` cp -v ../glibc-2.3.6/sysdeps/unix/sysv/linux/inotify.h \ /usr/include/sys ``` locales能使系統以一種上面命令沒有安裝的語言處理。要注意locales是必須的,如果他們中的一些丟失了,后面的測試單元會跳過重要測試。 單個的locale可以通過使用`localedef` 程序來安裝。例如,下面的第一個 `localedef` 命令將`/usr/share/i18n/locales/de_DE`跟`/usr/share/i18n/charmaps/ISO-8859-1.gz`結合,并添加到 `/usr/lib/locale/locale-archive` 文件中。下面的說明將會安裝一個所需locale的最小集合: ``` mkdir -pv /usr/lib/locale localedef -i de_DE -f ISO-8859-1 de_DE localedef -i de_DE@euro -f ISO-8859-15 de_DE@euro localedef -i en_HK -f ISO-8859-1 en_HK localedef -i en_PH -f ISO-8859-1 en_PH localedef -i en_US -f ISO-8859-1 en_US localedef -i en_US -f UTF-8 en_US.UTF-8 localedef -i es_MX -f ISO-8859-1 es_MX localedef -i fa_IR -f UTF-8 fa_IR localedef -i fr_FR -f ISO-8859-1 fr_FR localedef -i fr_FR@euro -f ISO-8859-15 fr_FR@euro localedef -i fr_FR -f UTF-8 fr_FR.UTF-8 localedef -i it_IT -f ISO-8859-1 it_IT localedef -i ja_JP -f EUC-JP ja_JP ``` 另外,你可以安裝你的國家、語言和字符集所對應的locale。 當然,可以一次安裝所有列在`glibc-2.3.6/localedata/SUPPORTED` 中的locales,利用下面的命令: ``` make localedata/install-locales ``` 接著使用`localedef`命令來創建和安裝locales沒有列在`glibc-2.3.6/localedata/SUPPORTED`中的(這種情況不太可能),如果你需要他們的話。 ## 6.9.2\. 配置 Glibc 我們需要建立 /etc/nsswitch.conf 文件。因為在這個文件丟失或不正確的情況下,Glibc 會使用默認配置,而 Glibc 的默認配置無法很好地在網絡環境下工作。并且我們也需要設置自己的時區。 使用如下命令建立一個新的 /etc/nsswitch.conf 文件: ``` cat > /etc/nsswitch.conf << "EOF" # Begin /etc/nsswitch.conf passwd: files group: files shadow: files hosts: files dns networks: files protocols: files services: files ethers: files rpc: files # End /etc/nsswitch.conf EOF ``` 要想確定本地時區,可以使用下面的腳本: ``` tzselect ``` 按照順序回答腳本運行過程中提出的幾個問題后,腳本就會給出所需時區文件的位置(比如 _America/Edmonton_)。還有其他的一些時區列在`/usr/share/zoneinfo`中,比如_Canada/Eastern_ 或 _EST5EDT_,這些雖然沒有被腳本識別,但是都可以使用。 再用下列命令來創建 /etc/localtime 文件: ``` cp -v --remove-destination /usr/share/zoneinfo/<xxx> \ /etc/localtime ``` 將 _`<xxx>`_ 替換成選擇的時區的名稱(比如,Canada/Eastern)。 **cp 命令選項的含義:** _`--remove-destination`_ 強制刪除已存在的符號鏈接。我們采用拷貝文件而不是創建符號鏈接的原因是:有可能 /usr 在單獨的分區上,如果啟動進入單用戶模式,就會出問題。 ## 6.9.3\. 配置動態鏈接庫加載程序 默認情況下,動態鏈接庫加載程序(/lib/ld-linux.so.2)搜索 /lib 和 /usr/lib 目錄來尋找程序需要使用的動態連接庫。但是,如果某些庫在這兩個目錄之外,你就需要把它們的路徑加到 /etc/ld.so.conf 文件里,以便動態鏈接庫加載程序能夠找到它們。 /usr/local/lib 和 /opt/lib 是兩個經常包含動態連接庫但又不在默認目錄中的目錄,我們要把它們添加到動態鏈接庫加載程序的搜索路徑中。 使用如下命令創建新的 /etc/ld.so.conf 文件: ``` cat > /etc/ld.so.conf << "EOF" # Begin /etc/ld.so.conf /usr/local/lib /opt/lib # End /etc/ld.so.conf EOF ``` ## 6.9.4\. Glibc 的內容 **安裝的程序:** catchsegv, gencat, getconf, getent, iconv, iconvconfig, ldconfig, ldd, lddlibc4, locale, localedef, mtrace, nscd, nscd_nischeck, pcprofiledump, pt_chown, rpcgen, rpcinfo, sln, sprof, tzselect, xtrace, zdump, zic**安裝的庫:** ld.so, libBrokenLocale.{a,so}, libSegFault.so, libanl.{a,so}, libbsd-compat.a, libc.{a,so}, libcidn.so, libcrypt.{a,so}, libdl.{a,so}, libg.a, libieee.a, libm.{a,so}, libmcheck.a, libmemusage.so, libnsl.a, libnss_compat.so, libnss_dns.so, libnss_files.so, libnss_hesiod.so, libnss_nis.so, libnss_nisplus.so, libpcprofile.so, libpthread.{a,so}, libresolv.{a,so}, librpcsvc.a, librt.{a,so}, libthread_db.so, libutil.{a,so} ### 簡要描述 | | | | --- | --- | | `catchsegv` | 當程序發生段故障的時候,用來建立一個堆棧跟蹤 | | `gencat` | 建立消息列表 | | `getconf` | 針對文件系統的指定變量顯示其系統設置值 | | `getent` | 從系統管理數據庫獲取一個條目 | | `iconv` | 字符集轉換 | | `iconvconfig` | 建立快速加載的 iconv 模塊所使用的配置文件 | | `ldconfig` | 配置動態鏈接庫的實時綁定 | | `ldd` | 列出每個程序或者命令需要的共享庫 | | `lddlibc4` | 幫助 ldd 操作目標文件 | | `locale` | 打印當前locale的詳細信息 | | `localedef` | 編譯 locale 標準 | | `mtrace` | 讀取并解釋一個內存跟蹤文件然后以人類可讀的格式顯示一個摘要 | | `nscd` | 為最常用的名稱服務請求提供緩存的守護進程 | | `nscd_nischeck` | 檢查在進行 NIS+ 查找時是否需要安全模式 | | `pcprofiledump` | 轉儲 PC profiling 產生的信息 | | `pt_chown` | 一個輔助程序,幫助 grantpt 設置子虛擬終端的屬主、用戶組、讀寫權限 | | `rpcgen` | 產生實現遠程過程調用(RPC)協議的 C 代碼 | | `rpcinfo` | 對 RPC 服務器產生一個 RPC 呼叫 | | `sln` | ln 程序使用靜態連接編譯的版本,在 ln 不起作用的時候,sln 仍然可以建立符號鏈接 | | `sprof` | 讀取并顯示共享目標的特征描述數據 | | `tzselect` | 對用戶提出關于當前位置的問題并輸出時區信息到標準輸出 | | `xtrace` | 通過打印當前執行的函數跟蹤程序執行情況 | | `zdump` | 顯示時區 | | `zic` | 時區編譯器 | | `ld.so` | 幫助動態鏈接庫執行的輔助程序 | | `libBrokenLocale` | 幫助應用程序(如Mozilla)處理破損的 locale | | `libSegFault` | 段故障信號處理器 | | `libanl` | 異步名稱查詢庫 | | `libbsd-compat` | 為了在 linux 下執行一些 BSD 程序,libbsd-compat 提供了必要的可移植性 | | `libc` | 主 C 庫,集成了最常用函數 | | `libcidn` | 被Glibc使用,在`getaddrinfo()`函數中來處理國際域名 | | `libcrypt` | 用于的加密庫 | | `libdl` | 動態連接接口庫 | | `libg` | g++ 運行時庫 | | `libieee` | IEEE 浮點運算庫 | | `libm` | 數學函數庫 | | `libmcheck` | 包括了啟動(boot)時需要的代碼 | | `libmemusage` | 幫助 memusage 搜集程序運行時的內存占用信息 | | `libnsl` | 提供網絡服務的庫 | | `libnss` | 名稱服務切換庫,包含了解釋主機名、用戶名、組名、別名、服務、協議等等的函數 | | `libpcprofile` | 包含用于跟蹤某些特定源代碼的 CPU 使用時間的 profiling 函數 | | `libpthread` | POSIX 線程庫 | | `libresolv` | 創建、發送、解釋到互聯網域名服務器的數據包 | | `librpcsvc` | 提供 RPC 的其他雜項服務 | | `librt` | 提供了大部分的 POSIX.1b 運行時擴展接口 | | `libthread_db` | 對多線程程序的調試很有用 | | `libutil` | 包含了在很多不同的 Unix 程序中使用的"標準"函數 |
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看