<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>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 5.7\. 調整工具鏈 現在臨時的C庫已經裝好,接下來本章中要編譯的所有工具應該連接到這些庫上。為了達到這個目標,需要調整連接器和編譯器的 specs 文件。 在第一遍編譯 Binutils 快結束時已經調整過的連接器,現在需要被重新命名以便可以被正確的找到和使用。首先備份原來的連接器,然后用調整過的連接器來替代,最后還要創建一個指向 `/tools/$(gcc -dumpmachine)/bin` 中連接器副本的連接。 ``` mv -v /tools/bin/{ld,ld-old} mv -v /tools/$(gcc -dumpmachine)/bin/{ld,ld-old} mv -v /tools/bin/{ld-new,ld} ln -sv /tools/bin/ld /tools/$(gcc -dumpmachine)/bin/ld ``` 從現在開始,所有程序都將連接到 `/tools/lib` 中的庫文件。 下面要做的是修正 GCC 的"specs"文件,使它指向新的動態連接器。一個簡單的 `sed` 命令就能做到: ``` SPECFILE=`dirname $(gcc -print-libgcc-file-name)`/specs && gcc -dumpspecs > $SPECFILE && sed 's@^/lib/ld-linux.so.2@/tools&@g' $SPECFILE > tempspecfile && mv -vf tempspecfile $SPECFILE && unset SPECFILE ``` 推薦你拷貝和粘貼上面的命令,而不是手動輸入。當然你也可以手動編輯 specs 文件,只要把所有的"/lib/ld-linux.so.2"都替換成"/tools/lib/ld-linux.so.2"就行了。 請用你的眼睛親自仔細檢查一下 specs 文件,以確保上述修改的的確確生效了。 ### 重要 如果你的系統平臺上,動態連接器的名字不是 `ld-linux.so.2` ,你必須把上面命令里的"ld-linux.so.2"換成你的系統平臺上動態連接器的名字。參見[節 5.2, "工具鏈技術說明,"](toolchaintechnotes.html "5.2\. 工具鏈技術說明")。 在編譯過程中,GCC 會運行 `fixincludes` 腳本來掃描系統頭文件目錄,并找出需要修正的頭文件(比如包含語法錯誤),然后把修正后的文件放到 GCC 專屬頭文件目錄里。因此,它可能會找出宿主系統中需要修正的頭文件,并將修正后的結果放到 GCC 專屬頭文件目錄里。由于本章的剩余部分僅需要使用當前已經安裝好的 GCC 和 Glibc 的頭文件,所以任何"修正后的"頭文件都可以被安全的刪除。并且這樣做也有助于避免宿主系統中的頭文件"污染"編譯環境。運行下面的命令刪除 GCC 專屬頭文件目錄中的頭文件(由于命令較長,推薦你拷貝和粘貼命令,而不是手動輸入): ``` GCC_INCLUDEDIR=`dirname $(gcc -print-libgcc-file-name)`/include && find ${GCC_INCLUDEDIR}/* -maxdepth 0 -xtype d -exec rm -rvf '{}' \; && rm -vf `grep -l "DO NOT EDIT THIS FILE" ${GCC_INCLUDEDIR}/*` && unset GCC_INCLUDEDIR ``` ### 小心 現在,需要停下來確認新工具鏈的基本功能(編譯和連接)是否按預期工作,運行下面的命令做一個簡單的合理性檢查: ``` echo 'main(){}' > dummy.c cc dummy.c readelf -l a.out | grep ': /tools' ``` 如果一切正常,應該不會出錯,而且最后一個命令的結果應當是: ``` [Requesting program interpreter: /tools/lib/ld-linux.so.2] ``` 注意,`/tools/lib` 應該是動態連接器的前綴。 如果輸出不是像上面那樣或者根本沒有輸出,那么就有大問題了。返回并檢查前面的操作,找出問題,并改正過來。在改正之前,不要繼續后面的部份,因為這樣做沒有意義。首先,再次上述合理性檢查,用 `gcc` 代替 `cc` ,如果工作正常,那么是因為 `/tools/bin/cc` 這個符號鏈接丟失了。回頭看看[節 5.4, "GCC-4.0.3 - 第一遍,"](gcc-pass1.html "5.4\. GCC-4.0.3 - 第一遍"),并建立符號鏈接。接下來,確保 `PATH` 正確。檢查時,運行 `echo $PATH` 并檢查 `/tools/bin` 是否在列表的最前面。如果 `PATH` 錯誤,可能是因為你沒有以 `lfs` 用戶登錄,或者在[節 4.4, "設置工作環境."](../chapter04/settingenvironment.html "4.4\. 設置工作環境")部分出錯了。另外一個原因可能是上面修正 specs 文件時出錯,如果這樣,重新修改 specs 文件,復制粘貼時要小心仔細。 在確定一切正常后,刪除測試文件: ``` rm -v dummy.c a.out ``` ### 注意 下一小節中編譯 TCL 時也將有助于檢查工具連是否正確。如果 TCL 編譯失敗則表示之前安裝的 Binutils 、GCC 或 Glibc 有問題,而不是 TCL 自身有問題。
                  <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>

                              哎呀哎呀视频在线观看