久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

交叉編譯gcc

 guitarhua 2016-09-20
因為最新的Qt5.7需要C++11的編譯器,,而手上有的編譯器最高版本為arm-linux-gcc-4.5.1,不支持c++11,只能自己動手編譯了,。
網(wǎng)上說的很多都是自舉編譯,,就是一開始只有一個x86版本的gcc,,然后要編譯出一個arm-linux-gcc來,。必須分成兩步走,,首先編譯一個不支持glibc的arm-linux-gcc,,這個不支持動態(tài)庫,可以用來編譯uboot和kernel的不支持動態(tài)鏈接的程序,,剛好可以用來編譯glibc,。因為glibc是linux系統(tǒng)最底層的支持庫,所以都是靜態(tài)編譯的,,或者說它不會調(diào)用其他層次的動態(tài)庫,,因為它自己就是最底層的了。編譯后glibc后就可以編譯最終版本的gcc了,,這時候gcc在被編譯時會和剛才編譯出來的glibc進行對接,,需要調(diào)用系統(tǒng)或glibc函數(shù)時直接從剛才編譯出的glibc庫文件中調(diào)取就行了。

因為自己手上已經(jīng)有了現(xiàn)成的arm-linux-gcc-4.5.1和glibc庫可用,所以就可以跳過自舉編譯的那一步,,直接用arm-linux-gcc-4.5.1進行編譯,,一步到位,。相關(guān)腳本如下
首先編譯一個binutils:
/opt/ct-ng-build/.build/src/binutils-2.25.1/configure --prefix=/usr/local/cross-tools/tools/ --with-sysroot=/opt/tinyroot --target=arm-hes-linux-gnueabi
make -j8
make install
然后是編譯gcc:

export CC_FOR_TARGET=arm-linux-gcc
export GCC_FOR_TARGET=arm-linux-gcc
export CXX_FOR_TARGET=arm-linux-g++

export BINUTILS_PATH=/usr/local/cross-tools/tools
export AR_FOR_TARGET=${BINUTILS_PATH}/bin/arm-hes-linux-gnueabi-ar
export LD_FOR_TARGET=${BINUTILS_PATH}/bin/arm-hes-linux-gnueabi-ld
export OBJDUMP_FOR_TARGET=${BINUTILS_PATH}/bin/arm-hes-linux-gnueabi-objdump
export NM_FOR_TARGET=${BINUTILS_PATH}/bin/arm-hes-linux-gnueabi-nm
export RANLIB_FOR_TARGET=${BINUTILS_PATH}/bin/arm-hes-linux-gnueabi-ranlib
export READELF_FOR_TARGET=${BINUTILS_PATH}/bin/arm-hes-linux-gnueabi-readelf
export STRIP_FOR_TARGET=${BINUTILS_PATH}/bin/arm-hes-linux-gnueabi-strip
export AS_FOR_TARGET=${BINUTILS_PATH}/bin/arm-hes-linux-gnueabi-as
export OBJCOPY_FOR_TARGET=${BINUTILS_PATH}/bin/arm-hes-linux-gnueabi-objcopy

/opt/gcc-5.2.0/configure --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=arm-hes-linux-gnueabi --prefix=/usr/local/cross-tools/ --with-arch=armv6 --with-tune=arm1176jzf-s --with-fpu=vfp --with-float=softfp --enable-languages=c,c++ --disable-multilib --enable-threads=posix --with-sysroot=/opt/tinyroot --disable-nls --enable-symvers=gnu --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --enable-target-optspace --disable-libstdcxx-pch --enable-plugins --enable-linker-build-id  --enable-long-long --with-linker-hash-style=both --enable-plugin --enable-gold --enable-lto --enable-__cxa_atexit --disable-libmudflap --disable-libgomp --disable-libssp --disable-libquadmath --disable-libquadmath-support --disable-libsanitizer --program-suffix=5.2.0  --with-gmp=/usr/local --with-mpfr=/usr/local --with-mpc=/usr/local --with-isl==/usr/local --disable-decimal-float --disable-checking --with-build-time-tools=/usr/local/cross-tools/tools >log
make -j8 >>log

很關(guān)鍵的一點必須注意:
binutils配置中的--target必須和gcc配置中的--target一致,不然會出錯,,提示/usr/local/cross-tools/tools//bin/arm-linux-ld: 未知的仿真模式: armelf_linux_eabi
支持的仿真: armelf_linux armelf armelfb armelfb_linux

一開始binutils 配置的--target=arm-linux,,可是gcc配置偏偏不支持--target=arm-linux,
最后配置為--target=arm-linux-gnueabi,可是又出現(xiàn)了上面的錯誤提示,查了很多資料都沒解決,。
忽然靈光一閃,,ld是在binutils中編譯的,會不會是binutils和gcc配置目標不一致導(dǎo)致出問題呢,?,!
修改binutils配置如上面腳本所示后重新編譯,再編譯gcc,,一步成功?。?!問題果然如此?。?br>還有一個必須要注意的是binutils和gcc配置中的--with-sysroot必須保持一直,,不然會出問題,!因為兩個是互相配置工作的,一個編譯,,一個鏈接,,必須有默契才行。binutils中的as和ld必須按照gcc文檔放到固定目錄下或者在配置參數(shù)中指定,,不然可能出錯,。一開始我沒按照說明來做,結(jié)果交叉編譯時gcc調(diào)用了系統(tǒng)本身的x86版本的as和ld,。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多