學(xué)習(xí)啦>學(xué)習(xí)電腦>操作系統(tǒng)>Linux教程>

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

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

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

  解決方法一:不追求標(biāo)準(zhǔn)

  啟動(dòng)方法一

  把上例中/mylinux文件夾放到分區(qū)中,在分區(qū)中新建linux結(jié)構(gòu),把啟動(dòng)時(shí)用的文件外面做指向/mylinux中對(duì)應(yīng)文件的鏈接,如mount等命令和/sbin/init程序等。在lfs中制作目標(biāo)系統(tǒng)時(shí)會(huì)chroot進(jìn)/mnt/lfs文件夾中,這之前為chroot做的工作和我要說的是類似的,不懂的可以看看。

  啟動(dòng)方法二

  也可以把/mylinux的內(nèi)容放到分區(qū)中,然后做一個(gè)鏈接/mylinux/lib/ ld-linux.so.2鏈接到/lib/ld-linux.so.2。

  上面的方法都是為保持鏈接器的正確位置,但這就不是標(biāo)準(zhǔn)linux了。

  解決方法二:臨時(shí)工具鏈

  這種方法的思想是做一個(gè)根不是/的linux系統(tǒng),再用這個(gè)系統(tǒng)制作標(biāo)準(zhǔn)的linux系統(tǒng),這樣就不會(huì)有根沖突問題了。

  根不/的linux系統(tǒng)是怎么做的呢?其實(shí)就是上面說的/mylinux中的系統(tǒng),在lfs中的/tools中的系統(tǒng)。

  上面解決方法一中可知,根不是/的linux系統(tǒng)是可以啟動(dòng)的,用解決方法一中的啟動(dòng)方法一啟動(dòng)系統(tǒng),再用這個(gè)系統(tǒng)制作linux就可以占用根目錄/了。因?yàn)閱?dòng)的系統(tǒng)在目錄/mylinux中(LFS中為/tools)。這樣制作的linux就是標(biāo)準(zhǔn)結(jié)構(gòu)了。

  解決方法三:sysroot

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

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

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

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

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

  這種方法的好處是只要做好交叉編譯的gcc和binutils就可以了,利用源系統(tǒng)中的輔助工具進(jìn)行編譯。用sysroot一般是在交叉編譯中,同平臺(tái)的本地編譯是交叉編譯的一個(gè)子集,可以用在交叉編譯中的方法也可以用在本地編譯中。

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

根目錄沖突(ld-linux.so位置)解決方法 解決方法一:不追求標(biāo)準(zhǔn) 啟動(dòng)方法一 把上例中/mylinux文件夾放到分區(qū)中,在分區(qū)中新建linux結(jié)構(gòu),把啟動(dòng)時(shí)用的文件外面做指向/mylinux中對(duì)應(yīng)文件的鏈接,如mount等命令和/sbin/init程序等。在lfs中
推薦度:
點(diǎn)擊下載文檔文檔為doc格式
75426