重走LFS之路:(五) 工具鏈編譯-2
(題圖來自: techradar.com)
繼續來編譯工具,接下來編譯Glibc
if [ ! -r /usr/include/rpc/types.h ]; then
su -c ‘mkdir -pv /usr/include/rpc’
su -c ‘cp -v sunrpc/rpc/*.h /usr/include/rpc’
fi
tar -xf glibc-2.21.tar.xz
cd glibc-2.21/
mkdir -v ../glibc-build
cd ../glibc-build/
../glibc-2.21/configure \
–prefix=/tools \
–host=$LFS_TGT \
–build=$(../glibc-2.21/scripts/config.guess) \
–disable-profile \
–enable-kernel=2.6.32 \
–with-headers=/tools/include \
libc_cv_forced_unwind=yes \
libc_cv_ctors_header=yes \
libc_cv_c_cleanup=yes
make
make install
編譯安裝沒什麼新鮮的,不同的是需要測試一下
echo ‘main(){}’ > dummy.c
$LFS_TGT-gcc dummy.c
readelf -l a.out | grep ‘: /tools’
這時候回顯一行
[Requesting program interpreter: /tools/lib64/ld-linux-x86-64.so.2]
最後刪除測試檔案
rm -v dummy.c a.out
編譯Libstdc++有點麻煩,需要先重新命名一下gcc-build,免得和上次的編譯目錄摻和了
回到$LFS/src,然後執行以下命令
mv gcc-build gcc-build.first
新建gcc-build目錄
mkdir -pv gcc-build
cd gcc-build
調整Libstdc++配置
../gcc-4.9.2/libstdc++-v3/configure \
–host=$LFS_TGT \
–prefix=/tools \
–disable-multilib \
–disable-shared \
–disable-nls \
–disable-libstdcxx-threads \
–disable-libstdcxx-pch \
–with-gxx-include-dir=/tools/$LFS_TGT/include/c++/4.9.2
然後編譯安裝就好了
make
make install
進度很快,我們要二次編譯binutils了
在此之前,我們需要回到$LFS/src,然後重新命名binutils-build,再新建一個
mv binutils-build binutils-build.first
mkdir -v binutils-build
cd binutils-build
CC=$LFS_TGT-gcc \
AR=$LFS_TGT-ar \
RANLIB=$LFS_TGT-ranlib \
../binutils-2.25/configure \
–prefix=/tools \
–disable-nls \
–disable-werror \
–with-lib-path=/tools/lib \
–with-sysroot
編譯安裝
make
make install
第二次編譯安裝binutils之後,需要調整一下聯結器來進行主體編譯
make -C ld clean
make -C ld LIB_PATH=/usr/lib:/lib
cp -v ld/ld-new /tools/bin
至此binutils二次編譯安裝調整完畢,接下來要進行gcc的二次編譯
進入gcc原始碼目錄
cd $LFS/src/gcc-4.9.2
我們需要先寫一個限制檔案
cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \
`dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/include-fixed/limits.h
然後調整一下編譯環境
for file in \
$(find gcc/config -name linux64.h -o -name linux.h -o -name sysv4.h)
do
cp -uv $file{,.orig}
sed -e ‘s@/lib\(64\)\?\(32\)\?/ld@/tools&@g’ \
-e ‘s@/usr@/tools@g’ $file.orig > $file
echo ‘
#undef STANDARD_STARTFILE_PREFIX_1
#undef STANDARD_STARTFILE_PREFIX_2
#define STANDARD_STARTFILE_PREFIX_1 “/tools/lib/”
#define STANDARD_STARTFILE_PREFIX_2 “”‘ >> $file
touch $file.orig
done
加入mpfr,gmp,mpc三個包的支援
tar -xf ../mpfr-3.1.2.tar.xz
mv -v mpfr-3.1.2 mpfr
tar -xf ../gmp-6.0.0a.tar.xz
mv -v gmp-6.0.0 gmp
tar -xf ../mpc-1.0.2.tar.gz
mv -v mpc-1.0.2 mpc
重新命名libc++編譯的目錄
mv ../gcc-build ../gcc-build.libc++
新建編譯目錄
mkdir -v ../gcc-build
cd ../gcc-build
配置編譯選項
CC=$LFS_TGT-gcc \
CXX=$LFS_TGT-g++ \
AR=$LFS_TGT-ar \
RANLIB=$LFS_TGT-ranlib \
../gcc-4.9.2/configure \
–prefix=/tools \
–with-local-prefix=/tools \
–with-native-system-header-dir=/tools/include \
–enable-languages=c,c++ \
–disable-libstdcxx-pch \
–disable-multilib \
–disable-bootstrap \
–disable-libgomp
編譯後安裝
make
make install
在這之後我們需要做個軟連線
ln -sv gcc /tools/bin/cc
接下來寫個檔案測試一下
echo ‘main(){}’ > dummy.c
cc dummy.c
readelf -l a.out | grep ‘: /tools’
回顯應該還是這個
[Requesting program interpreter: /tools/lib64/ld-linux-x86-64.so.2]
最後清理一下測試檔案
rm -v dummy.c a.out
兩次編譯binutils和gcc之後,進入tcl的編譯安裝
回到$LFS/src目錄,解壓tcl原始碼
tar zxvf tcl8.6.3-src.tar.gz
cd tcl8.6.3
cd unix
配置編譯選項
./configure –prefix=/tools
編譯並測試
make
TZ=UTC make test
這個此時結果裡面有幾個數,Total是一共做了多少項測試,Passed是這些測試中透過了多少項,Skipped是跳過了幾項測試,Failed是這些測試中有多少失敗了。
從這份結果中,我們可以看到tcl編譯完全正常,一共116項測試,全部透過,這就意味著可以安裝了
make install
下面給tcl庫檔案加上屬主的寫許可權
chmod -v u+w /tools/lib/libtcl8.6.so
回顯應該是這樣
mode of `/tools/lib/libtcl8.6.so’ changed from 0555 (r-xr-xr-x) to 0755 (rwxr-xr-x)
安裝tcl的頭
make install-private-headers
回顯應該是這樣
Installing private header files to /tools/include/
做個軟連線
ln -sv tclsh8.6 /tools/bin/tclsh
繼續進行expect編譯,解壓並進入expect目錄
tar zxvf expect5.45.tar.gz
cd expect5.45
首先得重寫configure檔案
cp -v configure{,.orig}
sed ‘s:/usr/local/bin:/bin:’ configure.orig > configure
配置編譯選項
./configure –prefix=/tools \
–with-tcl=/tools/lib \
–with-tclinclude=/tools/include
編譯和測試
make
make test
本次測試我們發現一共有26個用例,其中透過了15個,有11個失敗了。不過在LFS 7.7的官方文件中有這麼一句
Note that the Expect test suite is known to experience failures under certain host conditions that are not within our
control. Therefore, test suite failures here are not surprising and are not considered critical.
這就說明測試用例失敗不代表主要依據,所以我們繼續往下安裝,只要安裝和使用不出問題,就沒關係。
make SCRIPTS=”” install
安裝沒有報錯,所以我們不必擔心那近乎一半的測試用例失敗。
繼續我們回到$LFS/src並解壓並配置編譯DejaGNU
tar zxvf dejagnu-1.5.2.tar.gz
cd dejagnu-1.5.2
./configure –prefix=/tools
這個配置完編譯選項之後可以直接安裝並檢查編譯
make install
make check
測試結果Summary顯示有68個測試透過,沒有失敗資訊
接下來是check的編譯安裝,check有點特殊的是,在配置編譯選項的時候,需要將配置結果設定一個變數。回到$LFS/src,解壓並進入原始碼目錄
tar zxvf check-0.9.14.tar.gz
cd check-0.9.14
開始配置編譯選項
PKG_CONFIG= ./configure –prefix=/tools
除了這個沒什麼新鮮的,就是configure的最後有個Summary of Check options
再就是編譯和編譯檢查
make
make check
檢查結果顯示,7個測試全部透過,安裝即可
make install
安裝成功後回到$LFS/src,繼續解壓ncurses並進入原始碼目錄
cd $LFS/src
tar zxvf ncurses-5.9.tar.gz
cd ncurses-5.9
下面的倒是沒新鮮的,配置編譯選項並且編譯安裝就可以了
./configure –prefix=/tools \
–with-shared \
–without-debug \
–without-ada \
–enable-widec \
–enable-overwrite
make
make install
回到$LFS/src,解壓bash並進入原始碼目錄
cd $LFS/src
tar zxvf bash-4.3.30.tar.gz
cd bash-4.3.30
配置編譯選項並且編譯
./configure –prefix=/tools –without-bash-malloc
進行編譯測試並且安裝
make tests
make install
再加個軟連線就完成了
ln -sv bash /tools/bin/sh
解壓編譯安裝bzip2
cd $LFS/src
tar zxvf bzip2-1.0.6.tar.gz
cd bzip2-1.0.6
make
make PREFIX=/tools install
來進行編譯coreutils,還是先回到$LFS/src,再解壓並進入coreutils原始碼目錄
cd $LFS/src
tar -xf coreutils-8.23.tar.xz
cd coreutils-8.23
配置coreutils的編譯選項
./configure –prefix=/tools –enable-install-program=hostname
編譯後測試,這次測試需要加個選項
make
make RUN_EXPENSIVE_TESTS=yes check
測試結果顯示,共306項測試,透過270項,跳過36項,沒有失敗和錯誤,繼續安裝就可以了
make install
接下來的diffutils沒有新鮮的,配置安裝路徑後編譯,檢查安裝就好了
cd $LFS/src
tar -xf diffutils-3.3.tar.xz
cd diffutils-3.3
./configure –prefix=/tools
make
make check
測試結果顯示共140項,透過112項,跳過28項,可以正常安裝
make install
接下來的file也如是一樣
cd $LFS/src
tar zxvf file-5.22.tar.gz
cd file-5.22
./configure –prefix=/tools
make
make check
make install
下一個是findutils,同樣的步驟
cd $LFS/src
tar zxvf findutils-4.4.2.tar.gz
cd findutils-4.4.2
./configure –prefix=/tools
make
make check
測試結果表明,28項測試全部透過,沒有失敗記錄,可以安裝
make install
繼續下一個軟體編譯,gawk過程也沒新鮮的,老規矩
cd $LFS/src
tar -xf gawk-4.1.1.tar.xz
cd gawk-4.1.1
./configure –prefix=/tools
make
make check
檢查結果認為有6項測試失敗,先不去理會,繼續安裝
make install
下一個軟體是gettext,這個稍微有點複雜
首先依舊進入$LFS/src來解壓並進入原始碼目錄
cd $LFS/src
tar -xf gettext-0.19.4.tar.xz
cd gettext-0.19.4
先進入gettext-tools目錄
cd gettext-tools
配置編譯選項
EMACS=”no” ./configure –prefix=/tools –disable-shared
接下來需要分別編譯
make -C gnulib-lib
make -C intl pluralx.c
make -C src msgfmt
make -C src msgmerge
make -C src xgettext
之後來手動安裝到/tools/bin下面
cp -v src/{msgfmt,msgmerge,xgettext} /tools/bin
繼續解壓編譯安裝grep
tar -xf grep-2.21.tar.xz
cd grep-2.21
./configure –prefix=/tools
make
make check
測試結果顯示共測試138項,透過120項,跳過18項,可以正常安裝
make install
接下來的gzip也如是一樣
cd $LFS/src
tar -xf gzip-1.6.tar.xz
cd gzip-1.6
./configure –prefix=/tools
make
make check
檢測結果顯示共15項測試,透過15項,可以正常安裝
make install
繼續下一個,M4的編譯安裝
cd $LFS/src
tar -xf m4-1.4.17.tar.xz
cd m4-1.4.17
./configure –prefix=/tools
make
make check
檢查結果顯示,共163項測試,透過142項,跳過21項,可以正常安裝
make install
繼續來編譯make
cd $LFS/src
tar jxvf make-4.1.tar.bz2
./configure –prefix=/tools –without-guile
make
make check
檢測結果顯示,共544項測試,沒有失敗,可以正常安裝
make install
大部分的工具軟體都是指定一下prefix引數就可以編譯安裝了,只有個別的需要做一下其他的調整。隨後,還會有一部分工具需要編譯安裝。
相關文章
- 重走LFS之路:(四) 工具鏈編譯-1編譯
- 重走LFS之路:(六) 工具鏈編譯-3編譯
- 重走LFS之路:(九) 基礎系統編譯-2編譯
- 重走LFS之路:(八) 基礎系統編譯-1編譯
- 重走LFS之路:(七) 基礎系統編譯準備編譯
- 重走LFS之路:(二) 儲存裝置準備
- 重走LFS之路:(三) 磁碟初始化與原始碼準備原始碼
- 重走JAVA之路(一):覆盤ButterKnife-編譯時註解Java編譯
- ubuntu下編譯交叉編譯工具鏈Ubuntu編譯
- 重走JS之路JS
- Go 編譯和工具鏈Go編譯
- linux LFS 編譯成功記錄Linux編譯
- 製作交叉編譯工具鏈概述編譯
- 交叉編譯工具鏈構建原理編譯
- 全網可用交叉編譯工具鏈大全編譯
- 重走機器學習之路——形而上者謂之道機器學習
- 重走JAVA之路(五):面試又被問執行緒池原理?教你如何反擊Java面試執行緒
- 重走JAVA程式設計之路(三)反射Java程式設計反射
- OpenJFX編譯填坑之路編譯
- N1064編譯鏈編譯編譯
- 重走JAVA程式設計之路(一)列舉Java程式設計
- 重走JAVA程式設計之路(二)註解Java程式設計
- 開源編譯工具和編譯軟體編譯
- hadoop編譯—+2.x編譯Hadoop編譯
- webpack 應用編譯優化之路Web編譯優化
- Android NDK 提供的交叉工具鏈手動編譯原始碼Android編譯原始碼
- java反編譯工具Java編譯
- CMake for Mac編譯工具Mac編譯
- 分散式編譯工具分散式編譯
- Android反編譯:反編譯工具和方法Android編譯
- .net反編譯工具ILSpy編譯
- C語言編譯工具C語言編譯
- 核心編譯part2編譯
- Linux中gcc編譯工具LinuxGC編譯
- [.NET大牛之路 006] 瞭解 Roslyn 編譯器ROS編譯
- [轉]andriod的apk檔案相關的編譯反編譯工具APK編譯
- ZOMI的AI編譯原理2AI編譯原理
- koa2 從入門到進階之路 (五)