(題圖來自: 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>&1 | tee gmp-check-log</code>
從測試日志中找出測試通過的結果總數,共有188項測試
<code>awk ‘/tests passed/{total+=$2} ; end{print total}’ gmp-check-log</code>
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(){}’ > dummy.c</code>
<code>cc dummy.c -v -wl,–verbose &> 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)” > /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)” > /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中國”