天天看點

重走LFS之路:(九) 基礎系統編譯-2重走LFS之路:(九) 基礎系統編譯-2

重走LFS之路:(九) 基礎系統編譯-2重走LFS之路:(九) 基礎系統編譯-2

(題圖來自: techradar.com)

<a target="_blank"></a>

gmp編譯有點不同,在編譯選項配置階段需要确定架構

還是先進入/src,解壓并進入gmp源碼目錄

<code>cd /src</code>

<code>tar xf gmp-6.0.0a.tar.xz</code>

<code>cd gmp-6.0.0</code>

如果是x86 – 32bit,則需要在配置編譯選項時前面加點東西

<code>abi=32 ./configure …</code>

如果是x86_64就繼續配置編譯選項

<code>./configure –prefix=/usr \</code>

<code>–enable-cxx \</code>

<code>–docdir=/usr/share/doc/gmp-6.0.0a</code>

gmp是有文檔需要生成的,是以這一步編譯之後要再生成一下文檔

<code>make</code>

<code>make html</code>

進行編譯測試并生成測試日志

<code>make check 2&gt;&amp;1 | tee gmp-check-log</code>

從測試日志中找出測試通過的結果總數,共有188項測試

<code>awk ‘/tests passed/{total+=$2} ; end{print total}’ gmp-check-log</code>

重走LFS之路:(九) 基礎系統編譯-2重走LFS之路:(九) 基礎系統編譯-2

2-gmptest

測試全部通過,這時要安裝兩部分,一部分是gmp,還有它的文檔

<code>make install</code>

<code>make install-html</code>

回到/src目錄,解壓并進入mpfr的源碼目錄

<code>tar xf mpfr-3.1.2.tar.xz</code>

<code>cd mpfr-3.1.2</code>

mpfr是需要先打更新檔再配置和編譯的

<code>patch -np1 -i ../mpfr-3.1.2-upstream_fixes-3.patch</code>

配置編譯選項

<code>–enable-thread-safe \</code>

<code>–docdir=/usr/share/doc/mpfr-3.1.2</code>

依然是編譯和生成文檔

檢查編譯

<code>make check</code>

安裝mpfr和它的文檔

依然是回到/src目錄來解壓和進入mpc源碼目錄

<code>tar zxvf mpc-1.0.2.tar.gz</code>

<code>cd mpc-1.0.2</code>

配置編譯選項時有點不同,需要指定文檔安裝目錄

<code>./configure –prefix=/usr –docdir=/usr/share/doc/mpc-1.0.2</code>

編譯和生成文檔

編譯檢查

安裝mpc和文檔

再次編譯gcc,我們至少應該編譯過兩遍以上了,非常熟悉

依舊是進入/src/gcc-4.9.2,由于以前編譯過,先把gcc-build重命名,再建立一個空目錄建構

<code>cd /src/gcc-4.9.2</code>

<code>mv ../gcc-build ../gcc-build.tool</code>

<code>mkdir -v ../gcc-build</code>

<code>cd ../gcc-build</code>

定義sed變量為sed的别名,然後配置編譯選項

<code>sed=sed \</code>

<code>../gcc-4.9.2/configure \</code>

<code>–prefix=/usr \</code>

<code>–enable-languages=c,c++ \</code>

<code>–disable-multilib \</code>

<code>–disable-bootstrap \</code>

<code>–with-system-zlib</code>

編譯gcc

編譯完成,在測試之前需要修改堆棧限制

<code>ulimit -s 32768</code>

執行編譯測試

<code>make -k check</code>

實測這個測試要做好久好久,如果你不是強迫症患者,可以選擇跳過這一步……

如果你是強迫症患者沒有跳過測試,那麼在測試完成後可以執行一個腳本來檢視結果

<code>../gcc-4.9.2/contrib/test_summary</code>

沒什麼事就安裝吧

隻不過在安裝之後,gcc需要手動去做符号連結

<code>ln -sv ../usr/bin/cpp /lib</code>

<code>ln -sv gcc /usr/bin/cc</code>

<code>install -v -dm755 /usr/lib/bfd-plugins</code>

<code>ln -sfv ../../libexec/gcc/$(gcc -dumpmachine)/4.9.2/liblto_plugin.so /usr/lib/bfd-plugins/</code>

下面來進行測試

<code>echo ‘main(){}’ &gt; dummy.c</code>

<code>cc dummy.c -v -wl,–verbose &amp;&gt; dummy.log</code>

<code>readelf -l a.out | grep ‘: /lib’</code>

我這裡是什麼都沒顯示,文檔說要顯示個東西

<code>[requesting program interpreter: /lib/ld-linux.so.2]</code>

然後要檢視日志

<code>grep -o ‘/usr/lib.*/crt[1in].*succeeded’ dummy.log</code>

<code>grep -b4 ‘^ /usr/include’ dummy.log</code>

<code>grep ‘search.*/usr/lib’ dummy.log |sed ‘s|; |\n|g’</code>

<code>grep “/lib.*/libc.so.6 ” dummy.log</code>

<code>grep found dummy.log</code>

這幾個隻要有顯示,沒報錯,就應該沒啥問題

清理測試現場

<code>rm -v dummy.c a.out dummy.log</code>

最後安裝一些其他的檔案

<code>mkdir -pv /usr/share/gdb/auto-load/usr/lib</code>

<code>mv -v /usr/lib/*gdb.py /usr/share/gdb/auto-load/usr/lib</code>

據說到這時候gcc就安裝完成了。

這也是個得打更新檔的東西,而且還得改兩行makefile

<code>cd /src</code>

<code>rm -rf /src/bzip2-1.0.6</code>

<code>tar zxvf bzip2-1.0.6.tar.gz</code>

<code>cd bzip2-1.0.6</code>

<code>patch -np1 -i ../bzip2-1.0.6-install_docs-1.patch</code>

<code>sed -i ‘s@\(ln -s -f \)$(prefix)/bin/@\1@’ makefile</code>

<code>sed -i “s@(prefix)/man@(prefix)/share/man@g” makefile</code>

這裡有個準備編譯,如果是在上次編譯的那個目錄裡做的話,這一步會報錯

<code>make -f makefile-libbz2_so</code>

<code>make clean</code>

編譯和安裝

<code>make prefix=/usr install</code>

還需要手動安裝子產品檔案和建立符号連結

<code>cp -v bzip2-shared /bin/bzip2</code>

<code>cp -av libbz2.so* /lib</code>

<code>ln -sv ../../lib/libbz2.so.1.0 /usr/lib/libbz2.so</code>

<code>rm -v /usr/bin/{bunzip2,bzcat,bzip2}</code>

<code>ln -sv bzip2 /bin/bunzip2</code>

<code>ln -sv bzip2 /bin/bzcat</code>

回到/src,解壓并進入源碼目錄

<code>tar zxvf pkg-config-0.28.tar.gz</code>

<code>cd pkg-config-0.28</code>

編譯選項配置的時候會有幾個參數調整

<code>–with-internal-glib \</code>

<code>–disable-host-tool \</code>

<code>–docdir=/usr/share/doc/pkg-config-0.28</code>

然後編譯,測試,安裝一氣呵成

由于以前編譯過,是以需要重命名後再重新解壓源碼目錄

<code>mv ncurses-5.9 ncurses-5.9.tool</code>

<code>tar zxvf ncurses-5.9.tar.gz</code>

<code>cd ncurses-5.9</code>

調整幾個編譯配置

<code>–mandir=/usr/share/man \</code>

<code>–with-shared \</code>

<code>–without-debug \</code>

<code>–enable-pc-files \</code>

<code>–enable-widec</code>

編譯安裝

還需要手工安裝子產品和履歷符号連結

<code>mv -v /usr/lib/libncursesw.so.5* /lib</code>

<code></code>

<code>ln -sfv ../../lib/$(readlink /usr/lib/libncursesw.so) /usr/lib/libncursesw.so</code>

<code>for lib in ncurses form panel menu ; do</code>

<code>rm -vf /usr/lib/lib${lib}.so</code>

<code>echo “input(-l${lib}w)” &gt; /usr/lib/lib${lib}.so</code>

<code>ln -sfv lib${lib}w.a /usr/lib/lib${lib}.a</code>

<code>ln -sfv ${lib}w.pc /usr/lib/pkgconfig/${lib}.pc</code>

<code>done</code>

<code>ln -sfv libncurses++w.a /usr/lib/libncurses++.a</code>

<code>rm -vf /usr/lib/libcursesw.so</code>

<code>echo “input(-lncursesw)” &gt; /usr/lib/libcursesw.so</code>

<code>ln -sfv libncurses.so /usr/lib/libcurses.so</code>

<code>ln -sfv libncursesw.a /usr/lib/libcursesw.a</code>

<code>ln -sfv libncurses.a /usr/lib/libcurses.a</code>

最後來安裝文檔

<code>mkdir -v /usr/share/doc/ncurses-5.9</code>

<code>cp -v -r doc/* /usr/share/doc/ncurses-5.9</code>

但是這時候有個問題,它不支援非寬字元集,我們需要再做點事情

<code>make distclean</code>

<code>–without-normal \</code>

<code>–without-cxx-binding</code>

<code>make sources libs</code>

<code>cp -av lib/lib*.so.5* /usr/lib</code>

原文釋出時間:2015-04-16

本文來自雲栖合作夥伴“linux中國”

繼續閱讀