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

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 6.10\. 再次調整工具鏈 現在,最終的 C 庫已經安裝好了,我們需要再次調整工具鏈,讓本章隨后編譯的那些工具都連接到這個庫上。基本上,就是把 [Chapter 5](../chapter05/chapter05.html) 中"調整工具鏈"那里做的調整給取消掉。在 [Chapter 5](../chapter05/chapter05.html) 中,工具鏈使用的庫是從宿主系統的 `/{,usr/}lib` 轉向新安裝的 `/tools/lib` 目錄。同樣的,現在工具鏈使用的庫將從臨時的 `/tools/lib` 轉向 LFS 系統最終的 `/{,usr/}lib` 目錄。 首先,備份 `/tools` 下的鏈接,用我們在第 5 章中編譯的鏈接器來替換,再創建一個鏈接到在 `/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 ``` 接下來,修正 GCC 的 specs 文件,使它指向新的動態鏈接器,這樣 GCC 才能知道在哪能發現開始文件。應用一個 `perl` 命令: ``` gcc -dumpspecs | \ perl -p -e 's@/tools/lib/ld-linux.so.2@/lib/ld-linux.so.2@g;' \ -e 's@\*startfile_prefix_spec:\n@$_/usr/lib/ @g;' > \ `dirname $(gcc --print-libgcc-file-name)`/specs ``` 修改之后,用你的眼睛親自檢查一下 specs 文件,確保已經改正確了。 ### 重要 如果你的系統平臺上,動態連接器的名字不是 `ld-linux.so.2` ,你必須把上面命令里的"ld-linux.so.2"換成你的系統平臺上動態連接器的名字。若有必要,請參見 [Section 5.2 "工具鏈技術說明"](../chapter05/toolchaintechnotes.html "5.2.?Toolchain Technical Notes")。 現在有必要停下來,檢查一下新工具鏈的基本功能(編譯和連接)是否正常,我們進行一個簡單的合理性檢查: ``` echo 'main(){}' > dummy.c cc dummy.c -Wl,--verbose &> dummy.log readelf -l a.out | grep ': /lib' ``` 如果一切正常,應該不會出錯,而且最后一個命令的結果應該是(某些特殊平臺上動態連接器的名稱可能與此處不同): ``` [Requesting program interpreter: /lib/ld-linux.so.2] ``` 注意,`/lib` 應該是動態連接器的前綴。 現在確保我們設置使用正確的開始文件: ``` grep -o '/usr/lib.*/crt[1in].* .*' dummy.log ``` 如果一切正常,應該不會出錯,而且最后一個命令的結果應該是: ``` /usr/lib/crt1.o succeeded /usr/lib/crti.o succeeded /usr/lib/crtn.o succeeded ``` 接下來要做的是驗證新的鏈接器是否在正確的搜索路徑內: ``` grep 'SEARCH.*/usr/lib' dummy.log |sed 's|; |\n|g' ``` 如果一切正常,應該不會出錯,而且最后一個命令的結果應該是: ``` SEARCH_DIR("/tools/i686-pc-linux-gnu/lib") SEARCH_DIR("/usr/lib") SEARCH_DIR("/lib"); ``` 下面,確保我們是否正在使用正確的 libc: ``` grep "/lib/libc.so.6 " dummy.log ``` 如果一切正常,應該不會出錯,而且最后一個命令的結果應該是: ``` attempt to open /lib/libc.so.6 succeeded ``` 最后,確保 GCC 正在使用正確的動態鏈接器: ``` grep found dummy.log ``` 如果一切正常,應該不會出錯,而且最后一個命令的結果應該是(某些特殊平臺上動態連接器的名稱可能與此處不同): ``` found ld-linux.so.2 at /lib/ld-linux.so.2 ``` 如果輸出與上面不同或者沒有輸出,那么就有大問題了。你需要檢查一下前面的操作,看看問題出在哪里,并改正過來。在改正之前,不要繼續后面的部份,因為沒什么意義。大多數情況下,出錯都是因為上面的 specs 文件沒改對。當然,如果你的平臺上動態連接器的名字不是 ld-linux.so.2 ,上面的結果也會不同。在繼續之前要解決所有的問題。 在確定一切正常后,刪除測試文件: ``` rm -v dummy.c a.out dummy.log ```
                  <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>

                              哎呀哎呀视频在线观看