精品丰满熟女一区二区三区_五月天亚洲欧美综合网_亚洲青青青在线观看_国产一区二区精选

  • <menu id="29e66"></menu>

    <bdo id="29e66"><mark id="29e66"><legend id="29e66"></legend></mark></bdo>

  • <pre id="29e66"><tt id="29e66"><rt id="29e66"></rt></tt></pre>

      <label id="29e66"></label><address id="29e66"><mark id="29e66"><strike id="29e66"></strike></mark></address>
      學(xué)習(xí)啦 > 學(xué)習(xí)電腦 > 操作系統(tǒng) > Linux教程 > 制作Linux的核心問題是什么

      制作Linux的核心問題是什么

      時(shí)間: 若木635 分享

      制作Linux的核心問題是什么

        制作Linux的核心問題:根目錄沖突(ld-linux.so位置

        由查找共享庫(kù)的過程我們知道,鏈接器ld-linux.so的位置是寫死在程序中的,那么寫入的鏈接器的路徑到底是怎么確定的呢?

        在程序的編譯過程中,gcc和binutils會(huì)查找C庫(kù)中的頭文件和共享庫(kù),鏈接器也是在編譯過程中查找到的。至于是gcc還是binutils做的這工作我也不清楚,不過gcc和binutils一定是依賴于同一個(gè)C庫(kù)的,搜索的也是同一個(gè)C庫(kù),所以不用考慮也可以。但一定要知道它們搜索的是哪個(gè)C庫(kù)。

        問題的產(chǎn)生

        由于我們制作的linux是在源系統(tǒng)中的一個(gè)文件夾中的,而我們編譯出來(lái)的程序的鏈接器還要指向目標(biāo)系統(tǒng)的C庫(kù),這就導(dǎo)致了程序中寫入的鏈接器的路徑含有了目標(biāo)系統(tǒng)所在文件夾這一部分,但這是不對(duì)的。

        例如我們把/mylinux當(dāng)做制作系統(tǒng)的根目錄,先編譯一個(gè)glibc在/mylinux文件夾中,再將工具鏈調(diào)整指向/mylinux中的glibc,之后編譯的程序就都指向了/mylinux中的glibc。

        可是制作的系統(tǒng)中的程序的鏈接器就變成了/mylinux/lib/ld-linux.so.X了。這樣我們把/mylinux中做好的系統(tǒng)放到一 個(gè)分區(qū)中啟動(dòng)時(shí),由于沒有/mylinux/lib/ld-linux.so.X這個(gè)鏈接器,所有程序都會(huì)因?yàn)檎也坏焦蚕韼?kù)而不能運(yùn)行(靜態(tài)編譯的除外)。

        如果你編譯過lfs,那你制作的tools和上面的/mylinux是一樣的,其中的程序的鏈接器為/tools/lib/ld-linux.so.2。你可以用ldd命令看一下。

        這個(gè)問題可以總結(jié)為鏈接器寫入程序的路徑是相對(duì)于根目錄的,而我們制作的系統(tǒng)不能占有根目錄,而造成鏈接器的位置編譯和運(yùn)行時(shí)不一致。

      75423