2017-02-03 49 views
1

我使用gcc-6.3.0,musl-1.1.16和binutils-2.27爲一個MIPS 24kc(dragino)目標平臺從零開始構建了一個自定義工具鏈。該工具鏈功能完全正常。如何從頭開始獲得更小的工具鏈?

但是,我的自定義工具鏈的大小比同等OpenWRT生成的工具鏈(557M vs 113M)的大小大五倍。由OpenWRT生成的工具鏈二進制文件(mips-openwrt-linux-musl- *)與libstdC++和libgcc_s庫動態鏈接。但是,我的工具鏈二進制文件與這些庫靜態鏈接:

$ ldd mips-openwrt-linux-musl-gcc-5.3.0 
    linux-vdso.so.1 => (0x00007ffc4d534000) 
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f878936f000) 
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f8789159000) 
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8788d8f000) 
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f8788a86000) 
    /lib64/ld-linux-x86-64.so.2 (0x000055df3ef8b000) 

$ ldd mips-linux-musl-gcc-6.3.0 
    linux-vdso.so.1 => (0x00007ffd40940000) 
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f2de4b8f000) 
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f2de47c6000) 
    /lib64/ld-linux-x86-64.so.2 (0x0000560bba4b6000) 

cc1和cc1plus會發生同樣的鏈接問題。這兩個二進制文件的大小很大(cc1是124MB,cc1plus是134MB)。

我的問題是:什麼是設置交叉工具鏈生成以獲得與OpenWRT生成的工具鏈一樣小的跨平臺工具鏈的正確方法?

婁你可以找到我在做建立我的定製工具鏈,以供參考步驟:

下載來源:

wget http://ftpmirror.gnu.org/binutils/binutils-2.27.tar.bz2     
wget http://ftpmirror.gnu.org/gcc/gcc-6.3.0/gcc-6.3.0.tar.bz2    
wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.12.6.tar.bz2  
wget https://www.musl-libc.org/releases/musl-1.1.16.tar.gz     
wget http://ftpmirror.gnu.org/mpfr/mpfr-3.1.5.tar.bz2      
wget http://ftpmirror.gnu.org/gmp/gmp-6.1.2.tar.bz2       
wget http://ftpmirror.gnu.org/mpc/mpc-1.0.2.tar.gz  

設置編譯環境:

export ROOTDIR="${HOME}/custom-toolchains/MIPS"        
export NATIVE_PREFIX="${ROOTDIR}/opt/native"         
export CROSS_PREFIX="${ROOTDIR}/opt/cross"         
export TARGET_MACHINE=mips             
export CPU=mips                
export ARCH=24kc                
export CLIB=musl                
export TARGET_TRIPLET=${CPU}-linux-${CLIB} 

構建本地binutils:

cd ${ROOTDIR}/src               
mkdir build-binutils               
cd build-binutils               
../binutils-2.27/configure --prefix="${NATIVE_PREFIX}" --disable-nls --disable-werror --disable-multilib 
make                   
make install 

構建天然GCC:

cd ${ROOTDIR}/src/gcc-6.3.0             
ln -s ../mpfr-3.1.5 mpfr              
ln -s ../gmp-6.1.2 gmp              
ln -s ../mpc-1.0.3 mpc              
cd ..                  
mkdir build-gcc                
cd build-gcc                 
../gcc-6.3.0/configure --prefix=${NATIVE_PREFIX} --disable-nls --enable-languages=c --disable-multilib 
make                   
make install 

構建跨binutils的:

cd ${ROOTDIR}/src               
mkdir build-${CPU}-binutils             
cd build-${CPU}-binutils              
../binutils-2.27/configure --target=${TARGET_TRIPLET} --prefix=${CROSS_PREFIX} --with-sysroot --disable-nls --disable-werror --disable-multilib 
make                   
make install 

安裝內核頭:

cd ${ROOTDIR}/src               
cd linux-3.12.6                
make ARCH=${TARGET_MACHINE} INSTALL_HDR_PATH=${CROSS_PREFIX}/${TARGET_TRIPLET} headers_install 

構建跨GCC(階段1)

cd ${ROOTDIR}/src               
mkdir build-bootstrap-${CPU}-gcc            
cd build-bootstrap-${CPU}-gcc            
../gcc-6.3.0/configure --target=${TARGET_TRIPLET} --prefix=${CROSS_PREFIX} --disable-nls --enable-languages=c --disable-multilib --disable-threads --disable-shared --with-float=soft --with-arch=${ARCH} 
make all-gcc install-gcc              
make all-target-libgcc install-target-libgcc 

構建橫截面, MUSL

cd ${ROOTDIR}/src               
mkdir build-${CLIB}               
cd build-${CLIB}                
CC=${TARGET_TRIPLET}-gcc CFLAGS=-Wa,-msoft-float ../musl-1.1.16/configure --prefix=${CROSS_PREFIX}/${TARGET_TRIPLET}/ --enable-optimize CROSS_COMPILE=${TARGET_TRIPLET}- 
make                   
make install  

構建跨海灣合作委員會(階段2)

cd ${ROOTDIR}/src               
mkdir build-${CPU}-gcc              
cd build-${CPU}-gcc               
../gcc-6.3.0/configure --target=${TARGET_TRIPLET} --prefix=${CROSS_PREFIX} --disable-nls --enable-languages=c,c++ --disable-multilib --enable-threads --enable-shared --with-float=soft --with-arch=${ARCH} --enable-target-optspace --disable-libgomp --disable-libmudflap --without-isl --without-cloog --disable-decimal-float --disable-libssp --disable-libsanitizer --enable-lto --with-host-libstdcxx=-lstdc++ 
make                   
make install 

感謝您對您的所有意見提前!

回答

1

解決此問題比預期的更簡單...所有工具鏈二進制文件都安裝在非剝離狀態。因此,這可以固定在調用的

$ make install-strip 

代替

$ make install 

當您安裝跨海灣合作委員會(階段2)。

生成的工具鏈大小爲122MB,與原始工具鏈的557M相比有什麼不錯。所以這個問題是固定的!希望這些信息對未來的其他人有用。謝謝!