萬盛學電腦網

 萬盛學電腦網 >> Linux教程 >> 根目錄沖突(ld-linux.so位置)解決方法有哪些

根目錄沖突(ld-linux.so位置)解決方法有哪些

  根目錄沖突(ld-linux.so位置)解決方法

  解決方法一:不追求標准

  啟動方法一

  把上例中/mylinux文件夾放到分區中,在分區中新建linux結構,把啟動時用的文件外面做指向/mylinux中對應文件的鏈接,如mount等命令和/sbin/init程序等。在lfs中制作目標系統時會chroot進/mnt/lfs文件夾中,這之前為chroot做的工作和我要說的是類似的,不懂的可以看看。

  啟動方法二

  也可以把/mylinux的內容放到分區中,然後做一個鏈接/mylinux/lib/ ld-linux.so.2鏈接到/lib/ld-linux.so.2。

  上面的方法都是為保持鏈接器的正確位置,但這就不是標准linux了。

  解決方法二:臨時工具鏈

  這種方法的思想是做一個根不是/的linux系統,再用這個系統制作標准的linux系統,這樣就不會有根沖突問題了。

  根不/的linux系統是怎麼做的呢?其實就是上面說的/mylinux中的系統,在lfs中的/tools中的系統。

  上面解決方法一中可知,根不是/的linux系統是可以啟動的,用解決方法一中的啟動方法一啟動系統,再用這個系統制作linux就可以占用根目錄/了。因為啟動的系統在目錄/mylinux中(LFS中為/tools)。這樣制作的linux就是標准結構了。

  解決方法三:sysroot

  根沖突的問題還可以理解為gcc和binutils的搜索路徑和編譯程序的根路徑的沖突問題。第一步編譯好目標系統的C庫(一般為glibc)後,再編譯程序就要用剛編譯好的目標系統的C庫了。也就是在編譯時要搜索剛編譯好的目標系統的C庫。但這樣編譯出的程序的中路徑就不是相對於根目錄/的了。

  如果我們能單指定gcc和binutils的搜索路徑,不改變編譯設置,這樣問題不用解決了嗎?

  這種功能可以通過sysroot設定,在編譯gcc和binutils時在configure的參數中加入--with-sysroot=<制作linux的根文件夾>,可以設置搜索路徑,使編譯過程中用的是指定的C庫,而編譯出的程序確是相對於根目錄/的。

  這樣編譯出的linux中的程序的鏈接器ld-linux.so.X的路徑就正確了。這樣就可以把制作的linux直接移到分區中啟動了。

  這是借鑒CLFS sysroot也可以叫CLFS3.0中的方法。

  這種方法的好處是只要做好交叉編譯的gcc和binutils就可以了,利用源系統中的輔助工具進行編譯。用sysroot一般是在交叉編譯中,同平台的本地編譯是交叉編譯的一個子集,可以用在交叉編譯中的方法也可以用在本地編譯中。

copyright © 萬盛學電腦網 all rights reserved