重走LFS之路:(九) 基礎系統編譯-2
(題圖來自: techradar.com)
GMP-6.0.0a
GMP編譯有點不同,在編譯選項配置階段需要確定架構
還是先進入/src,解壓並進入GMP原始碼目錄
cd /src
tar xf gmp-6.0.0a.tar.xz
cd gmp-6.0.0
如果是x86 – 32bit,則需要在配置編譯選項時前面加點東西
ABI=32 ./configure …
如果是x86_64就繼續配置編譯選項
./configure –prefix=/usr \
–enable-cxx \
–docdir=/usr/share/doc/gmp-6.0.0a
GMP是有文件需要生成的,所以這一步編譯之後要再生成一下文件
make
make html
進行編譯測試並生成測試日誌
make check 2>&1 | tee gmp-check-log
從測試日誌中找出測試透過的結果總數,共有188項測試
awk ‘/tests passed/{total+=$2} ; END{print total}’ gmp-check-log
測試全部透過,這時要安裝兩部分,一部分是GMP,還有它的文件
make install
make install-html
MPFR-3.1.2
回到/src目錄,解壓並進入mpfr的原始碼目錄
cd /src
tar xf mpfr-3.1.2.tar.xz
cd mpfr-3.1.2
MPFR是需要先打補丁再配置和編譯的
patch -Np1 -i ../mpfr-3.1.2-upstream_fixes-3.patch
配置編譯選項
./configure –prefix=/usr \
–enable-thread-safe \
–docdir=/usr/share/doc/mpfr-3.1.2
依然是編譯和生成文件
make
make html
檢查編譯
make check
安裝MPFR和它的文件
make install
make install-html
MPC-1.0.2
依然是回到/src目錄來解壓和進入MPC原始碼目錄
cd /src
tar zxvf mpc-1.0.2.tar.gz
cd mpc-1.0.2
配置編譯選項時有點不同,需要指定文件安裝目錄
./configure –prefix=/usr –docdir=/usr/share/doc/mpc-1.0.2
編譯和生成文件
make
make html
編譯檢查
make check
安裝MPC和文件
make install
make install-html
GCC-4.9.2
再次編譯GCC,我們至少應該編譯過兩遍以上了,非常熟悉
依舊是進入/src/gcc-4.9.2,由於以前編譯過,先把gcc-build重新命名,再新建一個空目錄構建
cd /src/gcc-4.9.2
mv ../gcc-build ../gcc-build.tool
mkdir -v ../gcc-build
cd ../gcc-build
定義SED變數為sed的別名,然後配置編譯選項
SED=sed \
../gcc-4.9.2/configure \
–prefix=/usr \
–enable-languages=c,c++ \
–disable-multilib \
–disable-bootstrap \
–with-system-zlib
編譯GCC
make
編譯完成,在測試之前需要修改堆疊限制
ulimit -s 32768
執行編譯測試
make -k check
實測這個測試要做好久好久,如果你不是強迫症患者,可以選擇跳過這一步……
如果你是強迫症患者沒有跳過測試,那麼在測試完成後可以執行一個指令碼來檢視結果
../gcc-4.9.2/contrib/test_summary
沒什麼事就安裝吧
make install
只不過在安裝之後,GCC需要手動去做符號連結
ln -sv ../usr/bin/cpp /lib
ln -sv gcc /usr/bin/cc
install -v -dm755 /usr/lib/bfd-plugins
ln -sfv ../../libexec/gcc/$(gcc -dumpmachine)/4.9.2/liblto_plugin.so /usr/lib/bfd-plugins/
下面來進行測試
echo ‘main(){}’ > dummy.c
cc dummy.c -v -Wl,–verbose &> dummy.log
readelf -l a.out | grep ‘: /lib’
我這裡是什麼都沒顯示,文件說要顯示個東西
[Requesting program interpreter: /lib/ld-linux.so.2]
然後要檢視日誌
grep -o ‘/usr/lib.*/crt[1in].*succeeded’ dummy.log
grep -B4 ‘^ /usr/include’ dummy.log
grep ‘SEARCH.*/usr/lib’ dummy.log |sed ‘s|; |\n|g’
grep “/lib.*/libc.so.6 ” dummy.log
grep found dummy.log
這幾個只要有顯示,沒報錯,就應該沒啥問題
清理測試現場
rm -v dummy.c a.out dummy.log
最後安裝一些其他的檔案
mkdir -pv /usr/share/gdb/auto-load/usr/lib
mv -v /usr/lib/*gdb.py /usr/share/gdb/auto-load/usr/lib
據說到這時候GCC就安裝完成了。
Bzip2-1.0.6
這也是個得打補丁的東西,而且還得改兩行Makefile
cd /src
rm -rf /src/bzip2-1.0.6
tar zxvf bzip2-1.0.6.tar.gz
cd bzip2-1.0.6
patch -Np1 -i ../bzip2-1.0.6-install_docs-1.patch
sed -i ‘s@\(ln -s -f \)$(PREFIX)/bin/@\1@’ Makefile
sed -i “s@(PREFIX)/man@(PREFIX)/share/man@g” Makefile
這裡有個準備編譯,如果是在上次編譯的那個目錄裡做的話,這一步會報錯
make -f Makefile-libbz2_so
make clean
編譯和安裝
make
make PREFIX=/usr install
還需要手動安裝模組檔案和建立符號連結
cp -v bzip2-shared /bin/bzip2
cp -av libbz2.so* /lib
ln -sv ../../lib/libbz2.so.1.0 /usr/lib/libbz2.so
rm -v /usr/bin/{bunzip2,bzcat,bzip2}
ln -sv bzip2 /bin/bunzip2
ln -sv bzip2 /bin/bzcat
Pkg-config-0.28
回到/src,解壓並進入原始碼目錄
cd /src
tar zxvf pkg-config-0.28.tar.gz
cd pkg-config-0.28
編譯選項配置的時候會有幾個引數調整
./configure –prefix=/usr \
–with-internal-glib \
–disable-host-tool \
–docdir=/usr/share/doc/pkg-config-0.28
然後編譯,測試,安裝一氣呵成
make
make check
make install
Ncurses-5.9
由於以前編譯過,所以需要重新命名後再重新解壓原始碼目錄
cd /src
mv ncurses-5.9 ncurses-5.9.tool
tar zxvf ncurses-5.9.tar.gz
cd ncurses-5.9
調整幾個編譯配置
./configure –prefix=/usr \
–mandir=/usr/share/man \
–with-shared \
–without-debug \
–enable-pc-files \
–enable-widec
編譯安裝
make
make install
還需要手工安裝模組和簡歷符號連結
mv -v /usr/lib/libncursesw.so.5* /lib
ln -sfv ../../lib/$(readlink /usr/lib/libncursesw.so) /usr/lib/libncursesw.so
for lib in ncurses form panel menu ; do
rm -vf /usr/lib/lib${lib}.so
echo “INPUT(-l${lib}w)” > /usr/lib/lib${lib}.so
ln -sfv lib${lib}w.a /usr/lib/lib${lib}.a
ln -sfv ${lib}w.pc /usr/lib/pkgconfig/${lib}.pc
done
ln -sfv libncurses++w.a /usr/lib/libncurses++.a
rm -vf /usr/lib/libcursesw.so
echo “INPUT(-lncursesw)” > /usr/lib/libcursesw.so
ln -sfv libncurses.so /usr/lib/libcurses.so
ln -sfv libncursesw.a /usr/lib/libcursesw.a
ln -sfv libncurses.a /usr/lib/libcurses.a
最後來安裝文件
mkdir -v /usr/share/doc/ncurses-5.9
cp -v -R doc/* /usr/share/doc/ncurses-5.9
但是這時候有個問題,它不支援非寬字符集,我們需要再做點事情
make distclean
./configure –prefix=/usr \
–with-shared \
–without-normal \
–without-debug \
–without-cxx-binding
make sources libs
cp -av lib/lib*.so.5* /usr/lib
相關文章
- 重走LFS之路:(八) 基礎系統編譯-1編譯
- 重走JAVA之路(一):覆盤ButterKnife-編譯時註解Java編譯
- 重走JS之路JS
- C編譯: makefile基礎編譯
- 編譯系統概要編譯
- Go編譯原理系列2(詞法分析&語法分析基礎)Go編譯原理詞法分析語法分析
- css預編譯--sass基礎篇CSS編譯
- Linux系統下自行編譯安裝MySQL及基礎配置全過程解析Linux編譯MySql
- 小菜鳥的React之路--Redux基礎2ReactRedux
- Github配合Eclipse和JetBrains系編譯器的使用(基礎篇)GithubEclipseAI編譯
- 容器編排系統之Kubernetes基礎入門
- 逆向基礎(九)
- 分散式系統理論基礎2 :CAP分散式
- OpenJFX編譯填坑之路編譯
- 重走JAVA程式設計之路(三)反射Java程式設計反射
- 【python系統學習16】編碼基礎知識Python
- 容器編排系統之Kubectl工具的基礎使用
- hadoop編譯—+2.x編譯Hadoop編譯
- <<Modern CMake>> 翻譯 2. CMake 基礎
- 重走JAVA程式設計之路(一)列舉Java程式設計
- 重走JAVA程式設計之路(二)註解Java程式設計
- linux系統基礎Linux
- hadoop64位系統編譯Hadoop編譯
- 【git】Ubuntu作業系統上安裝Git LFSGitUbuntu作業系統
- C#反編譯工具:.NET Reflector基礎使用C#編譯
- 重走機器學習之路——形而上者謂之道機器學習
- 容器編排系統之Pod資源配置清單基礎
- 【編測編學】MySQL資料庫基礎知識2MySql資料庫
- Linux系統下編譯Openssl 步驟:Linux編譯
- ubuntu系統編譯安裝OpenCV 4.4Ubuntu編譯OpenCV
- Marvelous Designer基礎操作2 - 制板編輯
- 分散式系統基礎分散式
- 檔案系統基礎
- (九) SpringBoot起飛之路-整合/整合Swagger 2 And 3Spring BootSwagger
- 容器編排系統K8s之Volume的基礎使用K8S
- JavaSE基礎知識分享(九)Java
- 推薦系統之路 (2):產品聚類聚類
- Java零基礎學習之路(九)Java虛擬機器記憶體管理Java虛擬機記憶體