在uty同學的積極鼓勵下,青蛙開始了glinux下一個版本的製作(關於glinux的歷史,歡迎回顧青蛙從前的日誌)。
一開始,青蛙準備利用debian現成的編譯環境,但是後來突然想自己構建一個工具鏈比較好。 工具穩定下來,做出來的東西才比較有保障。 於是,青蛙從新拾起lfs,開始第二輪lfs征程,不過這次lfs只做三分之一,青蛙的目標就是:lfs6.3的Toolschain。
具體操作過程沒啥好說的,簡單的step by step就好,但是在製作過程中,遇到了幾個bug(可能也算不上bug,可能是青蛙系統的原因)。
這第一個,就是在glibc-2.5.1這步,會遇到下面這個錯誤:
mawk: scripts/gen-sorted.awk: line 19: regular expression compile failed (bad class — [], [^] or [)
/[^
mawk: scripts/gen-sorted.awk: line 19: syntax error at or near ]
mawk: scripts/gen-sorted.awk: line 19: runaway regular expression /, “”, subd …
再往上翻還有這麼一句:
mawk: scripts/gen-sorted.awk: line 19: syntax error at or near ]
拿google一划拉,發現這個錯誤是因為青蛙系統上用了mawk的問題,據說換用gawk可以解決。
在babble.com上面有人給出了一個patch ,很簡單,給三個地方加個“\”就ok了。 但是這個patch是給glibc2.7用的,在lfs6.3裡帶的glibc2.5.1裡面沒法直接用。 青蛙按圖索驥,改了這個gen-sorted.awk,就沒有上頭那些錯誤了。
雖說一個補丁可以解決這個問題,但是有前輩告訴我們 ,lfs裡面的用的都是awk的腳本,如果用mawk很有可能不會有正確的結果,所以建議大家還是安裝gawk的好。
gawk源碼在這裡下載 ,debian系的系統只需要aptitude install gawk就好了。 其他發行版要注意檢查/etc/alternatives/awk是不是正確指向了gawk。
(順路說一句,cpu在賣力的cc的時候正好可以過來寫blog,真是很不錯,可以隨時把過程記錄下來:p)
第二個錯誤是在glibc2.5.1的make check過程中:
/tools/bin/ld: cannot find -lstdc++
collect2: ld returned 1 exit status
make[2]: *** [/mnt/lfs/sources/glibc-build/nptl/tst-cancel24] Error 1
make[2]: Target `tests' not remade because of errors.
make[1]: *** [nptl/tests] Error 2
make[1]: Target `check' not remade because of errors.
make: *** [check] Error 2
青蛙沒有找到這個錯誤的原因,大概就像lfs文檔裡說的,第一次編譯lfs跟宿主系統依賴關係太大的原因造成的。
第三個錯誤發生在bash3.2的make過程中,它會提示沒有找到yacc這個程序,解決方法很簡單,通過apt裝上就好了。
到這裡,工具鏈的製作就完成了,下一步就可以製作系統的目錄結構並編譯內核了。







