導航:首頁 > 軟體大全 > lgcc是什麼電腦軟體

lgcc是什麼電腦軟體

發布時間:2022-07-04 09:49:01

1. 電腦開機出現C:\Program files\WindowsApps\AppUp.intelGrephics experience,求大神解決

一般是您刪除東西不是在控制面板中卸載的,這樣在開機啟動中還有信息,您可以到開機啟中看看有沒有這個東西,有就去掉(另外就是某程序出了問題)。

請問原來不這樣吧?如果是,出事前您在電腦上幹了什麼,下載什麼了,什麼東西有異常,如果想起什麼追問我說說,如果您自己也不知怎麼引起的,建議還原系統或重裝。

Win7810還原系統,右擊計算機選屬性,在右側選系統保護,系統還原,按步驟做就是了,如果有還原軟體,自帶的映像備份,並且進行了備份,也可以用軟體、映像備份還原系統。

有問題請您追問我。

開始/運行輸入regedit回車打開注冊表編輯器,選編輯/查找,你卸載軟體的英文名(lGCCTray.exe),找到軟體的鍵值項後刪除(多次查找反復刪除干凈,或按微軟鍵加按R鍵喚出運行,刪除後重啟一下電腦)。

2. 在maya裡面,排布uv時有一個選項叫」保壓解析度「,是做什麼用的

就是你設置的屏幕顯示率,必須要保存。推出來才會生效,如果不保存設置。推出來你設置的東西就會跟上一次一樣。

3. 請問為什麼XP系統能連上網路,Win7的系統卻連不上,請高手幫忙解決。

一、網路設置的問題

這種原因比較多出現在需要手動指定IP、網關、DNS伺服器聯網方式下,及使用代理伺服器上網的。仔細檢查計算機的網路設置。

二、DNS伺服器的問題

當IE無法瀏覽網頁時,可先嘗試用IP地址來訪問,如果可以訪問,那麼應該是DNS的問題,造成DNS的問題可能是連網時獲取DNS出錯或DNS伺服器本身問題,這時你可以手動指定DNS服務(地址可以是你當地ISP提供的DNS伺服器地址,也可以用其它地方可正常使用DNS伺服器地址。)在網路的屬性里進行,(控制面板—網路和拔號連接—本地連接—右鍵屬性—TCP/IP協議—屬性—使用下面的DNS伺服器地址)。不同的ISP有不同的DNS地址。有時候則是路由器或網卡的問題,無法與ISP的DNS服務連接,這種情況的話,可把路由器關一會再開,或者重新設置路由器。

還有一種可能,是本地DNS緩存出現了問題。為了提高網站訪問速度,系統會自動將已經訪問過並獲取IP地址的網站存入本地的DNS緩存里,一旦再對這個網站進行訪問,則不再通過DNS伺服器而直接從本地DNS緩存取出該網站的IP地址進行訪問。所以,如果本地DNS緩存出現了問題,會導致網站無法訪問。可以在「運行」中執行ipconfig/flushdns來重建本地DNS緩存。

三、IE瀏覽器本身的問題

當IE瀏覽器本身出現故障時,自然會影響到瀏覽了;或者IE被惡意修改破壞也會導致無法瀏覽網頁。這時可以嘗試用「金山毒霸安全助手」來修復。

四、網路防火牆的問題

如果網路防火牆設置不當,如安全等級過高、不小心把IE放進了阻止訪問列表、錯誤的防火牆策略等,可嘗試檢查策略、降低防火牆安全等級或直接關掉試試是否恢復正常。

五、網路協議和網卡驅動的問題

IE無法瀏覽,有可能是網路協議(特別是TCP/IP協議)或網卡驅動損壞導致,可嘗試重新網卡驅動和網路協議。

六、HOSTS文件的問題

HOSTS文件被修改,也會導致瀏覽的不正常,解決方法當然是清空HOSTS文件里的內容。

七、系統文件的問題

當與IE有關的系統文件被更換或損壞時,會影響到IE正常的使用,這時可使用SFC命令修復一下,WIN98系統可在「運行」中執行SFC,然後執行掃描;WIN2000/XP/2003則在「運行」中執行sfc/scannow嘗試修復。

其中當只有IE無法瀏覽網頁,而QQ可以上時,網頁教學網網( http://www.webjx.com)告訴大家,這一般都是由於winsock.dll、wsock32.dll或wsock.vxd(VXD只在WIN9X系統下存在)等文件損壞或丟失造成,Winsock是構成TCP/IP協議的重要組成部分,一般要重裝TCP/IP協議。但xp開始集成TCP/IP協議,所以不能像98那樣簡單卸載後重裝,可以使用netsh命令重置TCP/IP協議,使其恢復到初次安裝操作系統時的狀態。具體操作如下:

點擊「開始運行」,在運行對話框中輸入「CMD」命令,彈出命令提示符窗口,接著輸入「netshintipresetc:resetlog.txt」命令後會回車即可,其中「resetlog.txt」文件是用來記錄命令執行結果的日誌文件,該參數選項必須指定,這里指定的日誌文件的完整路徑是「c:resetlog.txt」。執行此命令後的結果與刪除並重新安裝TCP/IP協議的效果相同。

小提示:netsh命令是一個基於命令行的腳本編寫工具,你可以使用此命令配置和監視Windows系統,此外它還提供了互動式網路外殼程序介面,netsh命令的使用格式請參看幫助文件(在令提示符窗口中輸入「netsh/?」即可)。

第二個解決方法是修復以上文件,WIN9X使用SFC重新提取以上文件,WIN2000/XP/2003使用sfc/scannow命令修復文件,當用sfc/scannow無法修復時,可試試網上發布的專門針對這個問題的修復工具WinSockFix。

4. cygwin下安裝pycrypto時,出現GCC編譯錯誤,求教

交叉編譯工具鏈作為嵌入式Linux開發的基礎,直接影響到嵌入式開發的項目進度和完成質量。由於目前大多數開發人員使用Windows作為嵌入式開發的宿主機,在Windows中通過安裝VMware等虛擬機軟體來進行嵌入式Linux開發,這樣對宿主機的性能要求極高。Cygwin直接作為Windows下的軟體完全能滿足嵌入式Linux的開發工作,對硬體的要求低及方便快捷的特點成為嵌入式開發的最佳選擇。目前網路上Cygwin下直接可用的交叉編譯器寥寥無幾且版本都比較低,不能滿足開源軟體對編譯器版本依賴性的要求(如低版本工具鏈編譯U-Boot出現軟浮點問題等);Crosstool等交叉工具鏈製作工具也是更新跟不上自由軟體版本的進度;同時系統介紹Cygwin下製作交叉編譯器方面的資料很少。針對上述情況,基於最新版gcc等自由軟體構建Cygwin下的交叉編譯器顯得尤為迫切和重要。構建前准備工作首先Cygwin下必須保證基本工具比如make}gcc等來構建bootstrap-gcc編譯器,這可以在安裝Cygwin時選擇安裝。參照gcc等安裝說明文檔來在Cygwin下查看是否已經安裝,如輸入gcc--v等。源碼下載gcc-4.5.0的編譯需mpc的支持,而mpc又依賴gmp和mpfr庫。從各個項目官方網站上下載的最新的源碼:binutils-2.20.l.tar.bz2gmp-S.O.l.tar.bz2mpc-0.8.2.tar.gzmpfr-3.O.O.tar.bz2gcc-4.S.O.tar.bz2linux-2.6.34.tar.bz2glibc-2.11.2.tar.bz2glibc-ports-2.ll.tar.bz2gdb-7.l.tar.bz2設置環境變數HOST:工具鏈要運行的目標機器;BUILD:用來建立工具鏈的機器;TARGET工具鏈編譯產生的二進制代碼可以運行的機器。BUILD=i686-pc-cygwinHOST=i686-pc-cygwinTARGET=arm-linuxSYSROOT指定根目錄,$PREFIX指定安裝目錄。目標系統的頭文件、庫文件、運行時對象都將被限定在其中,這在交叉編譯中有時很重要,可以防止使用宿主機的頭文件和庫文件。本文首選$SYSROOT為安裝目錄,$PREFIX主要作為glibc庫安裝目錄。SYSROOT=/cross-rootPREFIX=/cross-root/arm-linux由於GCC-4.5.0需要mpfr,gmp,mpc的支持,而這三個庫又不需要交叉編譯,僅僅是在編譯交叉編譯鏈時使用,所以放在一個臨時的目錄。TEMP_PREFIX=/build-temp控制某些程序的本地化的環境變數:LCALL=POSIX設置環境變數:PATH=$SYSROOT/bin:兒in:/usr/bin設置編譯時的線程數f31減少編譯時間:PROCS=2定義各個軟體版本:BINUTILSV=2.20.1GCCV=4.5.0GMPV=5.0.1MPFRV=3.0.0MPCV二0.8.2LINUXV二2.6.34GLIBCV=2.11.2GLIBC-PORTSV=2.11GDBV=7.1構建過程詳解鑒於手工編譯費時費力,統一把構建過程寫到Makefile腳本文件中,把其同源碼包放在同一目錄下,執行make或順次執行每個命令即可進行無人值守的編譯安裝交叉工具鏈。以下主要以Makefile執行過程為主線進行講解。執行「make」命令實現全速運行可在Cygwin的Shell環境下執行「make>make.log2>&1」命令把編譯過程及出現的錯誤都輸出到make.log中,便於查找:all:prerequestinstall-depsinstall-cross-stage-oneinstall-cross-stage-two預處理操作"makeprerequest',命令實現單步執行的第一步,實現輸出變數、建立目錄及解壓源碼包等操作。0'set十h」關閉bash的Hash功能,使要運行程序的時候,shell將總是搜索PATH里的目錄[4]。這樣新工具一旦編譯好,shell就可以在$(SYSROOT)/bin目錄里找到:prerequest:set+h&&mkdir-p$(SYSROOT)/bin&&mkdir-p$(PREFIX)/include&&mkdir-p$(TEMP一REFIX)&&exportPATHLCesALL&&tar-xvfgmp-$(GMP_V).tar.bz2&&tar-xvfmpfr-$(MPFR_V).tar.bz2&&tar-xvfmpc-$(MPC_V).tar.gz&&tar-xvfbinutils-$(BINUTILS_V).tar.bz2&&tar-xvfgcc-$(GCC_V).tar.bz2&&tar-xvflinux-$(LINUX_V).tar.bz2&&tar-xvfglibc-$(GLIBC_V).tar.bz2&&tar-xvfglibc-ports-$(GLIBC-PORTS_V).tar.bz2&&myglibc-ports-$(GLIBC-PORTS_V)glibc-$(GLIBC_V)/ports&&tar-xvfgdb-$(GDBV).tar.bz2非交叉編譯安裝gcc支持包mpc00makeinstall-deps」命令實現單步執行的第二步,實現mpc本地編譯,mpc依賴於gmp和mpfrinstall-deps:gmpmpfrmpcgmp:gmp-$(GMP_V)mkdir-pbuild/gmp&&cdbuild/gmp&&../../gmp-*/configure--disable-shared--prefix=$(TEMP_PREFIX)&&$(MAKE)一$(PROCS)&&$(MAKE)installmpfr:mpfr-$(MPFR_V)mkdir-pb-uild/mpfr&&cdbuild/mpfr&&../..//mpfr-*/configureLDF'LAGS="-Wl,-search_paths_first」--disable-shared--with-gmp=$(TEMP_PREFIX)--prefix=$(TEMP_PREFIX)&&$(MAKE)一$(PROCS)all&&$(MAKE)installmpc:mpc-$(MPC_V)gmpmpfrmkdir-pbuild/mpc&&cdbuild/mpc&&../../mpc-*/configure--with-mpfr=$(TEMPPREFIX)--with-gmp=$(TEMP_PREFIX)--prefix=$(TEMP_PREFIX)&&$(MAKE)一$(PROCS)&&$(MAKE)install交叉編譯第一階段"makeinstall-cross-stage-one',命令實現單步執行的第三步,編譯安裝binutils,bootstrap-gcc和獲取Linux內核頭文件:install-cross-stage-one:cross-binutilscross-gccget-kernel-headers編譯安裝binutilscross-binutils:binutils-$(BINUTILS_V)mkdir-pbuild/binutils&&cdbuild/binutils&&../..//binutils-*/configure--prefix=$(SYSROOT)--target=$(TARGET)--disable-nls&&$(MAKE)j$(PROCS)&&$(MAKE)install編譯安裝bootstrap-gcc。使用一disable-shared參數的意思是不編譯和安裝libgcc_eh.a文件。glibc軟體包依賴這個庫,因為它使用其內部的一lgcc_eh來創建系統[6]。這種依賴性,可通過建立一個指向libgcc.a符號鏈接得到滿足,因為該文件最終將含有通常在libgcc-eh.a中的對象(也可通過補丁文件實現)。cross-gcc:gcc-$(GCC_V)mkdir-pbuild/gcc&&cdbuild/gcc&&二//gcc-*/configure--target=$(TARGET)--prefix=$(SYSROOT)--disable-nls--disable-shared--disable-multilib--disable-decimal-float--disable-threads--disable-libmudflap--disable-libssp--disable-libgomp--enable-languages=c--with-gmp=$(TEMP_PREFIX)--with-mpfr=$(TEMP_PREFIX)--with-mpc=$(TEMP_PREFIX)&&$(MAKE)-j$(PROCS)&&$(MAICE)install&&In-vslibgcc.a'arm-linux-gcc-print-libgcc-file-nameIsed's/libgcc/&eh/'}獲取Linux內核頭文件:get-kernel-headersainux-$(LINUX_V)cdlinux-$(LINUX_V)&&$(MAICE)mrproper&&$(MAKE)headerscheck&&$(MAKE)ARCH=arm&&INSTALLesHDR_PATH=destheaders_install&&finddest/include(-name.install一。-name..installNaNd)-delete&&cp-rvdesdinclude/*$(PREFIX)/include交叉編譯第二階段編譯安裝glibc、重新編譯安裝binutils、完整編譯安裝gcc和編譯安裝gdbo"makeinstall-cross-stage-two',命令實現單步執行的第四步:install-cross-stage-two:cross-glibccross-rebinutilscross-g++cross-gdb編譯安裝glibcaglib。的安裝路徑特意選為$(PREFIX),與gcc更好找到動態鏈接庫也有關系,選在$(SYSROOT)提示找不到crti.o;glibc已經不再支持i386;glibc對ARM等的處理器的支持主要通過glibc-ports包來實現;正確認識大小寫敏感(CaseSensitive)和大小寫不敏感(CaseInsensitive)系統,大小寫敏感問題主要影響到glibc,是交叉編譯glibc成功的關鍵:Cygwin幫助手冊中可知Cygwin是默認大小寫不敏感的n},但是UNIX系統是大小寫敏感的,這也是Cygwin和UNIX類系統的一個區別。通過作者自行參考製作的glibc-2.11.2-cygwin.patch補T使glibc變為Case-Insensitive,此補丁主要是對大小寫敏感問題改名來實現。交叉編譯過程中安裝的鏈接器,在安裝完Glibc以前都無法使用。也就是說這個配置的forcenwind支持測試會失敗,因為它依賴運行中的鏈接器。設置libc_cvforcenwind=yes這個選項是為了通知configure支持force-unwind,而不需要進行測試。libccv_c_cleanup=yes類似的,在configure腳本中使用libc_cv_ccleanup=yes,以便配置成跳過測試而支持C語言清理處理。cross-glibc:glibc-$(GLIBC_V)cdglibc-$(GLIBC_V)&&patch-Np1–i//glibc-2.11.2-cygwin.patch&&cd..&&mkdir-pbuild/glibc&&cdbuild/glibc&&echo"libccv_forcedesunwind=yes">config.cache&&echo"libccv_c_cleanup=yes">>config.cache&&echo"libccv_arm_tls=yes">>config.cache&&../../glibc-*/configure--host=$(TARGET)--build=$(../OneScheme/glibc-2.11.2/scripts/config.guess)--prefix=$(PREFIX)--disable-profile--enable-add-ons--enable-kernel=2.6.22.5--with-headers=$(PREFIX)/include--cache-file=config.cache&&$(MAKE)&&$(MAKE)install重新編譯安裝binutils。編譯之前要調整工具鏈,使其指向新生成的動態連接器。調整工具鏈:SPECS='dirname$(arm-linux-gcc-print-libgcc-file-name)'/specsarm-linux-gcc-mpspecssed-e's@/lib(64)\?/ld@$(PREFTX)&@g'-e,}/}}*cPP}$/{n;s,$,-isystem$(PREFIX)/include,}">$SPECSecho"Newspecsfileis:$SPECS"unsetSPECS測試調整後工具鏈:echo'main(川』>mmy.carm-linux-gcc-B/cross-root/arm-linux/libmmy.creadelf-1a.outIgrep』:/cross-roobarm-linux'調整正確的輸出結果:[Requestingprograminterpreter:/tools/lib/ld-linux.so.2j一切正確後刪除測試程序:rm-vmmy.ca.out重新編譯binutils。指定--host,--build及--target,否則配置不成功,其config.guess識別能力不如gcc做的好。cross-rebinutils:binutils-$(BINUTILS_V)mkdir-pbuild/rebinutils&&cdbuild/rebinutils&&CC="$(TARGET)-gcc-B/cross-roodarm-linux/lib/"&&AR=$(TARGET)-ar&&RANLIB=$(TARGET)-ranlib&&../..//binutils-*/configure--host=$(HOST)--build=$(BUILD)--target=$(TARGET)--prefix=$(SYSROOT)--disable-nls--with-lib-path=$(PREFIX)/lib&&$(MAKE)--$(PROCS)&&$(MAKE)install高於4.3版的gcc把這個編譯當作一個重置的編譯器,並且禁止在被一prefix指定的位置搜索startfiles。因為這次不是重置的編譯器,並且$(SYSROOT)目錄中的startfiles對於創建一個鏈接到$$(SYSROOT)目錄庫的工作編譯器很重要,所以我們使用下面的補丁,它可以部分還原gcc的老功能tai.patch-Npl–i../gcc-4.5.0-startfiles_fix-l.patch在正常條件下,運行gcc的fixincludes腳本,是為了修復可能損壞的頭文件。它會把宿主系統中已修復的頭文件安裝到gcc專屬頭文件目錄里,通過執行下面的命令,可以抑制fixincludes腳本的運行[9](此時目錄為/gcc-4.5.0)。cp-vgcc/Makefile.in{,.orig}sed's@\./fixinc\.sh@-ctrue@'gcc/Makefile.in.orig>gcc/Makefile.in下面更改gcc的默認動態鏈接器的位置,使用已安裝在/cross-root/ann-linux目錄下的鏈接器,這樣確保在gcc真實的編譯過程中使用新的動態鏈接器。即在編譯過程中創建的所有二進制文件,都會鏈接到新的glibc文件forfilein$(findgcc/config-namelinux64.h-o-namelinux.h–o-namesysv4.h)docp-uv$file{,.orig}sed-a's@/lib(64)?(32)?/Id@/cross-root/arm-linux&@g』-e's@/usr@/cross-rootlarm-linux@g'$file.orig>$fileecho『#undefSTANDARDINCLUDEDIR#defineSTANDARD_INCLUDEDIR"/cross-root/arm-linux/include"#"/cross-root/arm-linux/lib"#defineSTANDARD_STARTFILE_PREFIX_2」」』>>$filetouch$file.origdone完整編譯安裝gcc。最好通過指定--libexecdir更改libexecdir到atm-linux目錄下。--with-local-prefix選項指定gcc本地包含文件的安裝路徑此處設為$$(PREFIX),安裝後就會在內核頭文件的路徑下。路徑前指定$(Pwd)則以當前路徑為基點,不指定則默認以/home路徑為基點,這點要注意。cross-g++:gcc-$(GCC-)mkdir-pbuild/g十+&&cdbuild/g++&&CC="$(TARGET)-gccAR=$(TARGET)-ar&&-B/cross-roodarm-linux/lib/"&&RANLIB=$(TARGET)-ranlib&&..//gcc-*/configure--host=$(HOST)--build=$(BUILD)--target=$(TARGET)--prefix=$(SYSROOT)--with-local-prefix=$(PREFIX)--enable-clocale=gnu--enable-shared--enable-threads=posix--enable-cxa_atexit--enable-languages=c,c++--enable-c99--enable-long-long--disable-libstdcxx-pch--disable-libunwind-exceptions--with-gmp=$(TEMP_PREFIX)--with-mpfr=$(TEMP_PREFIX)--with-mpc=$(TEMP_PREFIX)&&$(MAKE)LD_IBRARY_ATH=$(pwd)/$(../../gcc-4.5.0/config.guess)/libgcc&&$(MAKE)install編譯安裝gdb,至此完成整個工具鏈的製作。cross-gdb:gdb-$(GDBV)mkdir-pbuild/gdb&&cdbuild/gdb&&../../gdb-*/configure--prefix=$(SYSROOT)--target=$(TARGET)--disable-werror&&$(MAKE)-j$(PROCS)&&$(MAKE)install「makeclean」命令清除編譯生成的文件和創建解壓的文件夾.PHONY:cleandean:rm-fr$(TEMP_PREFIX)buildbinutils-$(BINUTIL,S_V)gcc-$(GCC_V)glibc-$(NEWL.IB_V)gdb-$(GDB_V)gmp-$(GMP_V)mpc-$(MPC_V)mpfr-$(MPFR_V)工具鏈測試命令行中輸入以下內容:echo'main(){}』>mmy.carm-linux-gcc-ommy.exemmy.cfilemmy.exe運行正常的結果:mmy.exe:ELF32-bitLSBexecutable,ARM,version1,forGNU/Linux2.6.22,dynamicallylinked(usessharedlibs),notstripped.

5. 在makefile中判斷是cygwin還是Linux系統

交叉編譯工具鏈作為嵌入式Linux開發的基礎,直接影響到嵌入式開發的項目進度和完成質量。由於目前大多數開發人員使用Windows作為嵌入式開發的宿主機,在Windows中通過安裝VMware等虛擬機軟體來進行嵌入式Linux開發,這樣對宿主機的性能要求極高。Cygwin直接作為Windows下的軟體完全能滿足嵌入式Linux的開發工作,對硬體的要求低及方便快捷的特點成為嵌入式開發的最佳選擇。 目前網路上Cygwin下直接可用的交叉編譯器寥寥無幾且版本都比較低,不能滿足開源軟體對編譯器版本依賴性的要求(如低版本工具鏈編譯U-Boot出現軟浮點問題等);Crosstool等交叉工具鏈製作工具也是更新跟不上自由軟體版本的進度;同時系統介紹Cygwin下製作交叉編譯器方面的資料很少。針對上述情況,基於最新版gcc等自由軟體構建Cygwin下的交叉編譯器顯得尤為迫切和重要。 構建前准備工作 首先Cygwin下必須保證基本工具比如make}gcc等來構建bootstrap-gcc編譯器,這可以在安裝Cygwin時選擇安裝。參照gcc等安裝說明文檔來在Cygwin下查看是否已經安裝,如輸入gcc --v等。 源碼下載 gcc-4.5.0的編譯需mpc的支持,而mpc又依賴gmp和mpfr庫。從各個項目官方網站上下載的最新的源碼: binutils-2.20. l .tar.bz2 gmp-S.O. l .tar.bz2 mpc-0.8.2.tar.gz mpfr-3.O.O.tar.bz2 gcc-4.S.O.tar.bz2 linux-2.6.34.tar.bz2 glibc-2.11.2.tar.bz2 glibc-ports-2. l l .tar.bz2 gdb-7. l.tar.bz2 設置環境變數 HOST:工具鏈要運行的目標機器;BUILD:用來建立工具鏈的機器;TARGET工具鏈編譯產生的二進制代碼可以運行的機器。 BUILD=i686-pc-cygwin HOST=i686-pc-cygwin TARGET=arm-linux SYSROOT指定根目錄,$PREFIX指定安裝目錄。目標系統的頭文件、庫文件、運行時對象都將被限定在其中,這在交叉編譯中有時很重要,可以防止使用宿主機的頭文件和庫文件。本文首選$SYSROOT為安裝目錄,$PREFIX主要作為glibc庫安裝目錄。 SYSROOT=/cross-root PREFIX=/cross-root/arm-linux 由於GCC-4.5.0需要mpfr,gmp,mpc的支持,而這三個庫又不需要交叉編譯,僅僅是在編譯交叉編譯鏈時使用,所以放在一個臨時的目錄。 TEMP_PREFIX=/build-temp 控制某些程序的本地化的環境變數: LC ALL=POSIX 設置環境變數: PATH=$SYSROOT/bin:兒in:/usr/bin 設置編譯時的線程數f31減少編譯時間: PROCS=2 定義各個軟體版本: BINUTILS V=2.20.1 GCC V=4.5.0 GMP V=5.0.1 MPFR V=3.0.0 MPC V二0.8.2 LINUX V二2.6.34 GLIBC V=2.11.2 GLIBC-PORTS V=2.11 GDB V=7.1 構建過程詳解 鑒於手工編譯費時費力,統一把構建過程寫到Makefile腳本文件中,把其同源碼包放在同一目錄下,執行make或順次執行每個命令即可進行無人值守的編譯安裝交叉工具 鏈。以下主要以Makefile執行過程為主線進行講解。 執行「make」命令實現全速運行 可在Cygwin的Shell環境下執行「make>make.log 2>&1」命令把編譯過程及出現的錯誤都輸出到make.log中,便於查找: all:prerequest install-deps install-cross-stage-one install- cross-stage-two 預處理操作 "make prerequest',命令實現單步執行的第一步,實現輸出變數、建立目錄及解壓源碼包等操作。0'set十h」關閉bash的Hash功能,使要運行程序的時候,shell將總是搜索PATH里的目錄[4]。這樣新工具一旦編譯好,shell就可以在$(SYSROOT)/bin目錄里找到: prerequest: set +h&&mkdir -p $(SYSROOT)/bin&& mkdir -p $(PREFIX)/include&& mkdir -p $(TEMP一REFIX)&& export PATH LCes ALL&& tar -xvf gmp-$(GMP_V).tar.bz2&& tar -xvf mpfr-$(MPFR_V).tar.bz2&& tar -xvf mpc-$(MPC_V).tar.gz&& tar -xvf binutils-$(BINUTILS_V).tar.bz2&& tar -xvf gcc-$(GCC_V).tar.bz2&& tar -xvf linux-$(LINUX_V).tar.bz2&& tar -xvf glibc-$(GLIBC_V).tar.bz2&& tar -xvf glibc-ports-$(GLIBC-PORTS_V).tar.bz2&& my glibc-ports-$(GLIBC-PORTS_V) glibc-$(GLIBC_V)/ports&& tar -xvf gdb-$(GDB V).tar.bz2 非交叉編譯安裝gcc支持包mpc 00make install-deps」命令實現單步執行的第二步,實現mpc本地編譯,mpc依賴於gmp和mpfr install-deps:gmp mpfr mpc gmp:gmp-$(GMP_V) mkdir -p build/gmp&&cd build/gmp&& ../../gmp-*/configure --disable-shared --prefix=$(TEMP_PREFIX)&& $(MAKE)一$(PROCS)&&$(MAKE) install mpfr:mpfr-$(MPFR_V) mkdir -p b-uild/mpfr&&cd build/mpfr&& ../..//mpfr-*/configure LDF'LAGS="-Wl,-search_paths_first」--disable-shared --with-gmp=$(TEMP_PREFIX) --prefix=$(TEMP_PREFIX)&& $(MAKE)一$(PROCS) all&&$(MAKE) install mpc: mpc-$(MPC_V) gmp mpfr mkdir -p build/mpc&&cd build/mpc&& ../../mpc-*/configure --with-mpfr=$(TEMP PREFIX) --with-gmp=$(TEMP_PREFIX) --prefix=$(TEMP_PREFIX)&& $(MAKE)一$(PROCS)&&$(MAKE) install 交叉編譯第一階段 "make install-cross-stage-one',命令實現單步執行的第三步,編譯安裝binutils,bootstrap-gcc和獲取Linux內核頭文件: install-cross-stage-one:cross-binutils cross-gcc get-kernel-headers 編譯安裝binutils cross-binutils: binutils-$(BINUTILS_ V) mkdir -p build/binutils&&cd build/binutils&& ../..//binutils-*/configure --prefix=$(SYSROOT) --target=$(TARGET)--disable-nls&& $(MAKE)j$(PROCS)&&$(MAKE) install 編譯安裝bootstrap-gcc。使用一disable-shared參數的意思是不編譯和安裝libgcc_ eh.a文件。glibc軟體包依賴這個庫,因為它使用其內部的一lgcc_eh來創建系統[6]。這種依賴 性,可通過建立一個指向libgcc.a符號鏈接得到滿足,因為該文件最終將含有通常在libgcc- eh.a中的對象(也可通過補丁文件實現)。 cross-gcc:gcc-$(GCC_V) mkdir -p build/gcc&&cd build/gcc&& 二//gcc-*/configure --target=$(TARGET)--prefix=$(SYSROOT) --disable-nls --disable-shared --disable-multilib --disable-decimal-float--disable-threads --disable-libmudflap --disable-libssp --disable-libgomp --enable-languages=c --with-gmp=$(TEMP_PREFIX) --with-mpfr=$(TEMP_PREFIX) --with-mpc=$(TEMP_PREFIX)&& $(MAKE) -j$(PROCS)&&$(MAICE) install&& In -vs libgcc.a'arm-linux-gcc -print-libgcc-file-name I sed's/libgcc/& eh/'} 獲取Linux內核頭文件: get-kernel-headersainux-$(LINUX_V) cd linux-$(LINUX_V)&& $(MAICE) mrproper&&$(MAKE) headers check&& $(MAKE) ARCH=arm&& INSTALLes HDR_ PATH=dest headers_ install&& find dest/include (-name .install一。-name ..installNaNd)-delete&& cp -rv desdinclude/* $(PREFIX)/include 交叉編譯第二階段 編譯安裝glibc、重新編譯安裝binutils、完整編譯安裝gcc和編譯安裝gdb o "make install-cross-stage-two',命令實現單步執行的第四步: install-cross-stage-two:cross-glibc cross-rebinutils cross-g++ cross-gdb 編譯安裝glibca glib。的安裝路徑特意選為$(PREFIX),與gcc更好找到動態鏈接庫也有關系,選在$(SYSROOT)提示找不到crti.o; glibc已經不再支持i386; glibc對ARM等的處理器的支持主要通過glibc-ports包來實現;正確認識大小寫敏感(Case Sensitive)和大小寫不敏感(CaseInsensitive)系統,大小寫敏感問題主要影響到glibc,是交叉編譯glibc成功的關鍵:Cygwin幫助手冊中可知Cygwin是默認大小寫不敏感的n},但是UNIX系統是大小寫敏感的,這也是Cygwin和UNIX類系統的一個區別。通過作者自行參考製作的glibc-2.11.2-cygwin.patch補T使glibc變為Case-Insensitive,此補丁主要是對大小寫敏感問題改名來實現。 交叉編譯過程中安裝的鏈接器,在安裝完Glibc以前都無法使用。也就是說這個配置的forced unwind支持測試會失敗,因為它依賴運行中的鏈接器。設置libc_ cvforced unwind=yes這個選項是為了通知configure支持force-unwind,而不需要進行測試。libc cv_c_cleanup=yes類似的,在configure腳本中使用libc_cv_c cleanup=yes,以便配置成跳過測試而支持C語言清理處理。 cross-glibc:glibc-$(GLIBC_V) cd glibc-$(GLIBC_V)&& patch -Np 1 –i...//glibc-2.11.2-cygwin.patch&& cd..&&mkdir -p build/glibc&& cd build/glibc&& echo"libc cv_forcedes unwind=yes">config.cache&& echo "libc cv_c_cleanup=yes">>config.cache&& echo "libc cv_arm_tls=yes">>config.cache&& ../../glibc-*/configure --host=$(TARGET) --build=$(../OneScheme/glibc-2.11.2/scripts/config.guess) --prefix=$(PREFIX)--disable-profile --enable-add-ons --enable-kernel=2.6.22.5 --with-headers=$(PREFIX)/include --cache-file=config.cache&& $(MAKE)&&$(MAKE) install 重新編譯安裝binutils。編譯之前要調整工具鏈,使其 指向新生成的動態連接器。 調整工具鏈: SPECS= 'dirname $(arm-linux-gcc -print-libgcc-file-name)'/specs arm-linux-gcc -mpspecs sed -e 's@/lib(64)\?/ld@$(PREFTX)&@g' -e ,}/}}*cPP}$/{n;s,$,-isystem $(PREFIX)/include,}" >$SPECS echo "New specs file is: $SPECS" unset SPECS 測試調整後工具鏈: echo 'main(川』>mmy.c arm-linux-gcc -B/cross-root/arm-linux/lib mmy.c readelf -1 a.out I grep』:/cross-roobarm-linux' 調整正確的輸出結果: [Requesting program interpreter: /tools/lib/ld-linux.so.2j 一切正確後刪除測試程序: rm -v mmy.c a.out 重新編譯binutils。指定--host,--build及--target,否則配置不成功,其config.guess識別能力不如gcc做的好。 cross-rebinutils: binutils-$(BINUTILS_V) mkdir -p build/rebinutils&& cd build/rebinutils&&CC="$(TARGET)-gcc -B/cross-roodarm-linux/lib/"&&AR=$(TARGET)-ar&& RANLIB=$(TARGET)-ranlib&&../..//binutils-*/configure --host=$(HOST)--build=$(BUILD)--target=$(TARGET) --prefix=$(SYSROOT)--disable-nls --with-lib-path=$(PREFIX)/lib&& $(MAKE)--$(PROCS)&&$(MAKE) install 高於4.3版的gcc把這個編譯當作一個重置的編譯器,並且禁止在被一prefix指定的位置搜索startfiles。因為這次不是重置的編譯器,並且$(SYSROOT)目錄中的startfiles對於創 建一個鏈接到$$(SYSROOT)目錄庫的工作編譯器很重要,所以我們使用下面的補丁,它可以部分還原gcc的老功能tai . patch -Npl –i../gcc-4.5.0-startfiles_fix-l.patch 在正常條件下,運行gcc的fixincludes腳本,是為了修復可能損壞的頭文件。它會把宿主系統中已修復的頭文件安裝到gcc專屬頭文件目錄里,通過執行下面的命令,可以抑 制fixincludes腳本的運行[9](此時目錄為/gcc-4.5.0)。 cp -v gcc/Makefile.in{,.orig} sed 's@\./fixinc\.sh@-c true@' gcc/Makefile.in.orig > gcc/Makefile.in 下面更改gcc的默認動態鏈接器的位置,使用已安裝在/cross-root/ann-linux目錄下的鏈接器,這樣確保在gcc真實的編譯過程中使用新的動態鏈接器。即在編譯過程中創建的所有 二進制文件,都會鏈接到新的glibc文件 for file in $(find gcc/config -name linux64.h-o -name linux.h –o -name sysv4.h) do cp -uv $file{,.orig} sed -a 's@/lib(64)?(32)?/Id@/cross-root/arm-linux&@g』-e's@/usr@/cross-rootlarm-linux@g' $file.orig>$file echo『 #undef STANDARD INCLUDE DIR #define STANDARD_ INCLUDE DIR "/cross-root/arm-linux/include" #define STANDARD STARTFILE PREFIX 1 "/cross-root/arm-linux/lib" #define STANDARD_ STARTFILE_ PREFIX_ 2」」』>>$file touch $file.orig done 完整編譯安裝gcc。最好通過指定--libexecdir更改libexecdir到atm-linux目錄下。--with-local-prefix選項指定gcc本地包含文件的安裝路徑此處設為$$(PREFIX),安裝後就會在內核頭文件的路徑下。路徑前指定$(Pwd)則以當前路徑為基點,不指定則默認以/home路徑為基點,這點要注意。 cross-g++:gcc-$(GCC-) mkdir -p build/g十+&&cd build/g++&& CC="$(TARGET)-gcc AR=$(TARGET)-ar&& -B/cross-roodarm-linux/lib/"&& RANLIB=$(TARGET)-ranlib&& ..//gcc-*/configure --host=$(HOST)--build=$(BUILD)--target=$(TARGET) --prefix=$(SYSROOT)--with-local-prefix=$(PREFIX) --enable-clocale=gnu --enable-shared --enable-threads=posix --enable -cxa_atexit --enable-languages=c,c++--enable-c99 --enable-long-long --disable-libstdcxx-pch --disable-libunwind-exceptions --with-gmp=$(TEMP_PREFIX) --with-mpfr=$(TEMP_PREFIX) --with-mpc=$(TEMP_PREFIX)&& $(MAKE) LD_IBRARY_ATH= $(pwd)/$(../../gcc-4.5.0/config.guess)/libgcc&& $(MAKE) install 編譯安裝gdb,至此完成整個工具鏈的製作。 cross-gdb: gdb-$(GDB V) mkdir -p build/gdb&&cd build/gdb&& ../../gdb-*/configure --prefix=$(SYSROOT) --target=$(TARGET)--disable-werror&& $(MAKE)-j$(PROCS)&&$(MAKE) install 「make clean」命令清除編譯生成的文件和創建解壓的文件夾 .PHONY:clean dean: rm -fr $(TEMP_PREFIX) build binutils-$(BINUTIL,S_V) gcc-$(GCC_V) glibc-$(NEWL.IB_V) gdb-$(GDB_V) gmp-$(GMP_V) mpc-$(MPC_V) mpfr-$(MPFR_V) 工具鏈測試 命令行中輸入以下內容: echo 'main(){}』>mmy.c arm-linux-gcc -o mmy.exe mmy.c file mmy.exe 運行正常的結果: mmy.exe: ELF 32-bit LSB executable, ARM, version 1,for GNU/Linux 2.6.22, dynamically linked (uses shared libs),not stripped.

6. cygwin 中如何安裝arm-linux-gcc交叉編譯器

交叉編譯工具鏈作為嵌入式Linux開發的基礎,直接影響到嵌入式開發的項目進度和完成質量。由於目前大多數開發人員使用Windows作為嵌入式開發的宿主機,在Windows中通過安裝VMware等虛擬機軟體來進行嵌入式Linux開發,這樣對宿主機的性能要求極高。Cygwin直接作為Windows下的軟體完全能滿足嵌入式Linux的開發工作,對硬體的要求低及方便快捷的特點成為嵌入式開發的最佳選擇。

目前網路上Cygwin下直接可用的交叉編譯器寥寥無幾且版本都比較低,不能滿足開源軟體對編譯器版本依賴性的要求(如低版本工具鏈編譯U-Boot出現軟浮點問題等);Crosstool等交叉工具鏈製作工具也是更新跟不上自由軟體版本的進度;同時系統介紹Cygwin下製作交叉編譯器方面的資料很少。針對上述情況,基於最新版gcc等自由軟體構建Cygwin下的交叉編譯器顯得尤為迫切和重要。
構建前准備工作
首先Cygwin下必須保證基本工具比如make}gcc等來構建bootstrap-gcc編譯器,這可以在安裝Cygwin時選擇安裝。參照gcc等安裝說明文檔來在Cygwin下查看是否已經安裝,如輸入gcc --v等。
源碼下載
gcc-4.5.0的編譯需mpc的支持,而mpc又依賴gmp和mpfr庫。從各個項目官方網站上下載的最新的源碼:
binutils-2.20. l .tar.bz2
gmp-S.O. l .tar.bz2
mpc-0.8.2.tar.gz
mpfr-3.O.O.tar.bz2
gcc-4.S.O.tar.bz2
linux-2.6.34.tar.bz2
glibc-2.11.2.tar.bz2
glibc-ports-2. l l .tar.bz2
gdb-7. l.tar.bz2

設置環境變數
HOST:工具鏈要運行的目標機器;BUILD:用來建立工具鏈的機器;TARGET工具鏈編譯產生的二進制代碼可以運行的機器。
BUILD=i686-pc-cygwin
HOST=i686-pc-cygwin TARGET=arm-linux
SYSROOT指定根目錄,$PREFIX指定安裝目錄。目標系統的頭文件、庫文件、運行時對象都將被限定在其中,這在交叉編譯中有時很重要,可以防止使用宿主機的頭文件和庫文件。本文首選$SYSROOT為安裝目錄,$PREFIX主要作為glibc庫安裝目錄。
SYSROOT=/cross-root
PREFIX=/cross-root/arm-linux
由於GCC-4.5.0需要mpfr,gmp,mpc的支持,而這三個庫又不需要交叉編譯,僅僅是在編譯交叉編譯鏈時使用,所以放在一個臨時的目錄。
TEMP_PREFIX=/build-temp
控制某些程序的本地化的環境變數:
LC ALL=POSIX
設置環境變數:
PATH=$SYSROOT/bin:兒in:/usr/bin
設置編譯時的線程數f31減少編譯時間:
PROCS=2
定義各個軟體版本:
BINUTILS V=2.20.1
GCC V=4.5.0
GMP V=5.0.1
MPFR V=3.0.0
MPC V二0.8.2
LINUX V二2.6.34
GLIBC V=2.11.2
GLIBC-PORTS V=2.11
GDB V=7.1
構建過程詳解
鑒於手工編譯費時費力,統一把構建過程寫到Makefile腳本文件中,把其同源碼包放在同一目錄下,執行make或順次執行每個命令即可進行無人值守的編譯安裝交叉工具
鏈。以下主要以Makefile執行過程為主線進行講解。
執行「make」命令實現全速運行
可在Cygwin的Shell環境下執行「make>make.log 2>&1」命令把編譯過程及出現的錯誤都輸出到make.log中,便於查找:
all:prerequest install-deps install-cross-stage-one install-
cross-stage-two
預處理操作
"make prerequest',命令實現單步執行的第一步,實現輸出變數、建立目錄及解壓源碼包等操作。0'set十h」關閉bash的Hash功能,使要運行程序的時候,shell將總是搜索PATH里的目錄[4]。這樣新工具一旦編譯好,shell就可以在$(SYSROOT)/bin目錄里找到: prerequest:
set +h&&mkdir -p $(SYSROOT)/bin&&
mkdir -p $(PREFIX)/include&&
mkdir -p $(TEMP一REFIX)&&
export PATH LCes ALL&&
tar -xvf gmp-$(GMP_V).tar.bz2&&
tar -xvf mpfr-$(MPFR_V).tar.bz2&&
tar -xvf mpc-$(MPC_V).tar.gz&&
tar -xvf binutils-$(BINUTILS_V).tar.bz2&&
tar -xvf gcc-$(GCC_V).tar.bz2&&
tar -xvf linux-$(LINUX_V).tar.bz2&&
tar -xvf glibc-$(GLIBC_V).tar.bz2&&
tar -xvf glibc-ports-$(GLIBC-PORTS_V).tar.bz2&&
my glibc-ports-$(GLIBC-PORTS_V)
glibc-$(GLIBC_V)/ports&&
tar -xvf gdb-$(GDB V).tar.bz2
非交叉編譯安裝gcc支持包mpc
00make install-deps」命令實現單步執行的第二步,實現mpc本地編譯,mpc依賴於gmp和mpfr
install-deps:gmp mpfr mpc
gmp:gmp-$(GMP_V)
mkdir -p build/gmp&&cd build/gmp&&
../../gmp-*/configure
--disable-shared --prefix=$(TEMP_PREFIX)&&
$(MAKE)一$(PROCS)&&$(MAKE) install
mpfr:mpfr-$(MPFR_V)
mkdir -p b-uild/mpfr&&cd build/mpfr&&
../..//mpfr-*/configure
LDF'LAGS="-Wl,-search_paths_first」--disable-shared
--with-gmp=$(TEMP_PREFIX)
--prefix=$(TEMP_PREFIX)&&
$(MAKE)一$(PROCS) all&&$(MAKE) install
mpc: mpc-$(MPC_V) gmp mpfr
mkdir -p build/mpc&&cd build/mpc&&
../../mpc-*/configure
--with-mpfr=$(TEMP PREFIX)
--with-gmp=$(TEMP_PREFIX)
--prefix=$(TEMP_PREFIX)&&
$(MAKE)一$(PROCS)&&$(MAKE) install
交叉編譯第一階段
"make install-cross-stage-one',命令實現單步執行的第三步,編譯安裝binutils,bootstrap-gcc和獲取Linux內核頭文件:
install-cross-stage-one:cross-binutils cross-gcc get-kernel-headers
編譯安裝binutils
cross-binutils: binutils-$(BINUTILS_ V)
mkdir -p build/binutils&&cd build/binutils&&
../..//binutils-*/configure --prefix=$(SYSROOT)
--target=$(TARGET)--disable-nls&&
$(MAKE)j$(PROCS)&&$(MAKE) install
編譯安裝bootstrap-gcc。使用一disable-shared參數的意思是不編譯和安裝libgcc_ eh.a文件。glibc軟體包依賴這個庫,因為它使用其內部的一lgcc_eh來創建系統[6]。這種依賴
性,可通過建立一個指向libgcc.a符號鏈接得到滿足,因為該文件最終將含有通常在libgcc- eh.a中的對象(也可通過補丁文件實現)。
cross-gcc:gcc-$(GCC_V)
mkdir -p build/gcc&&cd build/gcc&&
二//gcc-*/configure
--target=$(TARGET)--prefix=$(SYSROOT)
--disable-nls --disable-shared --disable-multilib
--disable-decimal-float--disable-threads
--disable-libmudflap --disable-libssp
--disable-libgomp --enable-languages=c
--with-gmp=$(TEMP_PREFIX)
--with-mpfr=$(TEMP_PREFIX)
--with-mpc=$(TEMP_PREFIX)&&
$(MAKE) -j$(PROCS)&&$(MAICE) install&&
In -vs libgcc.a'arm-linux-gcc -print-libgcc-file-name I
sed's/libgcc/& eh/'}
獲取Linux內核頭文件:
get-kernel-headersainux-$(LINUX_V)
cd linux-$(LINUX_V)&&
$(MAICE) mrproper&&$(MAKE) headers check&&
$(MAKE) ARCH=arm&&
INSTALLes HDR_ PATH=dest headers_ install&&
find dest/include
(-name .install一。-name ..installNaNd)-delete&&
cp -rv desdinclude/* $(PREFIX)/include
交叉編譯第二階段
編譯安裝glibc、重新編譯安裝binutils、完整編譯安裝gcc和編譯安裝gdb o "make install-cross-stage-two',命令實現單步執行的第四步: install-cross-stage-two:cross-glibc cross-rebinutils cross-g++ cross-gdb
編譯安裝glibca glib。的安裝路徑特意選為$(PREFIX),與gcc更好找到動態鏈接庫也有關系,選在$(SYSROOT)提示找不到crti.o; glibc已經不再支持i386; glibc對ARM等的處理器的支持主要通過glibc-ports包來實現;正確認識大小寫敏感(Case Sensitive)和大小寫不敏感(CaseInsensitive)系統,大小寫敏感問題主要影響到glibc,是交叉編譯glibc成功的關鍵:Cygwin幫助手冊中可知Cygwin是默認大小寫不敏感的n},但是UNIX系統是大小寫敏感的,這也是Cygwin和UNIX類系統的一個區別。通過作者自行參考製作的glibc-2.11.2-cygwin.patch補T使glibc變為Case-Insensitive,此補丁主要是對大小寫敏感問題改名來實現。
交叉編譯過程中安裝的鏈接器,在安裝完Glibc以前都無法使用。也就是說這個配置的forced unwind支持測試會失敗,因為它依賴運行中的鏈接器。設置libc_ cvforced unwind=yes這個選項是為了通知configure支持force-unwind,而不需要進行測試。libc cv_c_cleanup=yes類似的,在configure腳本中使用libc_cv_c cleanup=yes,以便配置成跳過測試而支持C語言清理處理。
cross-glibc:glibc-$(GLIBC_V)
cd glibc-$(GLIBC_V)&&
patch -Np 1 –i...//glibc-2.11.2-cygwin.patch&&
cd..&&mkdir -p build/glibc&&
cd build/glibc&&
echo"libc cv_forcedes unwind=yes">config.cache&&
echo "libc cv_c_cleanup=yes">>config.cache&&
echo "libc cv_arm_tls=yes">>config.cache&&
../../glibc-*/configure --host=$(TARGET)
--build=$(../OneScheme/glibc-2.11.2/scripts/config.guess)
--prefix=$(PREFIX)--disable-profile
--enable-add-ons --enable-kernel=2.6.22.5
--with-headers=$(PREFIX)/include
--cache-file=config.cache&&
$(MAKE)&&$(MAKE) install
重新編譯安裝binutils。編譯之前要調整工具鏈,使其
指向新生成的動態連接器。
調整工具鏈:
SPECS=
'dirname $(arm-linux-gcc -print-libgcc-file-name)'/specs
arm-linux-gcc -mpspecs
sed -e 's@/lib(64)\?/ld@$(PREFTX)&@g' -e ,}/}}*cPP}$/{n;s,$,-isystem $(PREFIX)/include,}"
>$SPECS
echo "New specs file is: $SPECS"
unset SPECS
測試調整後工具鏈:
echo 'main(川』>mmy.c
arm-linux-gcc
-B/cross-root/arm-linux/lib mmy.c
readelf -1 a.out I grep』:/cross-roobarm-linux'
調整正確的輸出結果:
[Requesting program interpreter: /tools/lib/ld-linux.so.2j
一切正確後刪除測試程序:
rm -v mmy.c a.out
重新編譯binutils。指定--host,--build及--target,否則配置不成功,其config.guess識別能力不如gcc做的好。
cross-rebinutils: binutils-$(BINUTILS_V)
mkdir -p build/rebinutils&&
cd build/rebinutils&&CC="$(TARGET)-gcc
-B/cross-roodarm-linux/lib/"&&AR=$(TARGET)-ar&&
RANLIB=$(TARGET)-ranlib&&../..//binutils-*/configure
--host=$(HOST)--build=$(BUILD)--target=$(TARGET)
--prefix=$(SYSROOT)--disable-nls
--with-lib-path=$(PREFIX)/lib&&
$(MAKE)--$(PROCS)&&$(MAKE) install
高於4.3版的gcc把這個編譯當作一個重置的編譯器,並且禁止在被一prefix指定的位置搜索startfiles。因為這次不是重置的編譯器,並且$(SYSROOT)目錄中的startfiles對於創
建一個鏈接到$$(SYSROOT)目錄庫的工作編譯器很重要,所以我們使用下面的補丁,它可以部分還原gcc的老功能tai . patch -Npl –i../gcc-4.5.0-startfiles_fix-l.patch
在正常條件下,運行gcc的fixincludes腳本,是為了修復可能損壞的頭文件。它會把宿主系統中已修復的頭文件安裝到gcc專屬頭文件目錄里,通過執行下面的命令,可以抑
制fixincludes腳本的運行[9](此時目錄為/gcc-4.5.0)。
cp -v gcc/Makefile.in{,.orig}
sed 's@\./fixinc\.sh@-c true@'
gcc/Makefile.in.orig > gcc/Makefile.in
下面更改gcc的默認動態鏈接器的位置,使用已安裝在/cross-root/ann-linux目錄下的鏈接器,這樣確保在gcc真實的編譯過程中使用新的動態鏈接器。即在編譯過程中創建的所有
二進制文件,都會鏈接到新的glibc文件
for file in
$(find gcc/config -name linux64.h-o -name linux.h –o -name sysv4.h)
do cp -uv $file{,.orig}
sed -a 's@/lib(64)?(32)?/Id@/cross-root/arm-linux&@g』-e's@/usr@/cross-rootlarm-linux@g' $file.orig>$file echo『
#undef STANDARD INCLUDE DIR
#define STANDARD_ INCLUDE DIR "/cross-root/arm-linux/include"
#define STANDARD STARTFILE PREFIX 1 "/cross-root/arm-linux/lib"
#define STANDARD_ STARTFILE_ PREFIX_ 2」」』>>$file
touch $file.orig done
完整編譯安裝gcc。最好通過指定--libexecdir更改libexecdir到atm-linux目錄下。--with-local-prefix選項指定gcc本地包含文件的安裝路徑此處設為$$(PREFIX),安裝後就會在內核頭文件的路徑下。路徑前指定$(Pwd)則以當前路徑為基點,不指定則默認以/home路徑為基點,這點要注意。
cross-g++:gcc-$(GCC-)
mkdir -p build/g十+&&cd build/g++&&
CC="$(TARGET)-gcc AR=$(TARGET)-ar&&
-B/cross-roodarm-linux/lib/"&&
RANLIB=$(TARGET)-ranlib&&
..//gcc-*/configure
--host=$(HOST)--build=$(BUILD)--target=$(TARGET)
--prefix=$(SYSROOT)--with-local-prefix=$(PREFIX)
--enable-clocale=gnu --enable-shared
--enable-threads=posix --enable -cxa_atexit
--enable-languages=c,c++--enable-c99
--enable-long-long --disable-libstdcxx-pch
--disable-libunwind-exceptions
--with-gmp=$(TEMP_PREFIX)
--with-mpfr=$(TEMP_PREFIX)
--with-mpc=$(TEMP_PREFIX)&&
$(MAKE) LD_IBRARY_ATH=
$(pwd)/$(../../gcc-4.5.0/config.guess)/libgcc&&
$(MAKE) install
編譯安裝gdb,至此完成整個工具鏈的製作。
cross-gdb: gdb-$(GDB V)
mkdir -p build/gdb&&cd build/gdb&&
../../gdb-*/configure --prefix=$(SYSROOT)
--target=$(TARGET)--disable-werror&&
$(MAKE)-j$(PROCS)&&$(MAKE) install
「make clean」命令清除編譯生成的文件和創建解壓的文件夾
.PHONY:clean
dean:
rm -fr $(TEMP_PREFIX) build
binutils-$(BINUTIL,S_V) gcc-$(GCC_V)
glibc-$(NEWL.IB_V) gdb-$(GDB_V)
gmp-$(GMP_V) mpc-$(MPC_V) mpfr-$(MPFR_V)
工具鏈測試
命令行中輸入以下內容:
echo 'main(){}』>mmy.c
arm-linux-gcc -o mmy.exe mmy.c
file mmy.exe
運行正常的結果:
mmy.exe: ELF 32-bit LSB executable, ARM, version 1,for GNU/Linux 2.6.22, dynamically linked (uses shared libs),not stripped.

7. 建立交叉編譯環境後root無法登陸linux。

你這是建立交叉編譯?
只看見你復制了一堆軟體包到tmp,然後解壓,然後安裝了個編譯器.貌似也沒安裝,沒見編譯和安裝啊
你既然用tar的-v參數了,就要看他的信息啊.他報什麼錯了么?
我用的c到arm的交叉編譯環境搭建方法,你參考一下
用的軟體包:
linux-2.6.9.tar.gz
binutils-2.15.tar.gz
gcc-core-3.4.2.tar.bz2
gcc-g++3.4.2.tar.bz2
glibc-2.3.5.tar.gz
glibc-linuxthreads-2.3.5.tar.bz2
東西准備好了就開始搭建
[root@binnary ~ ]# mkdir /armtools
[root@binnary ~ ]#mkdir –p ~/tars/sourcedir
[root@binnary ~ ]#mkdir ~/tars/builddir
~/tars/sourcedir這個臨時目錄放源文件及解壓縮後的源文件。 ~/tars/builddir在這里進行編譯。
/armtools把arm-linux交叉編譯環境安裝在這里。

首先安裝binutils
[root@binnary ~ ]# cd ~/tars/sourcedir
[root@binnary sourcedir]# tar -zxf binutils-2.15.tar.gz
[root@binnary sourcedir ]# cd ~/tars/builddir
[root@binnary builddir ]# mkdir binutils
[root@binnary builddir ]# cd binutils
[root@binnary binutils ]# ../../sourcedir/binutils-2.15/configure --target=arm-linux --prefix=/armtools
[root@binnary binutils ]# make
[root@binnary binutils ]# make install
該編譯過程較慢,需要數十分鍾,安裝完成後查看/armtools/bin目錄下的文件
[root@binnary binutils ]# export PATH=/armtools/bin:$PATH

然後解壓縮,配置,拷貝頭文件
[root@binnary binutils ]# cd ~/tars/sourcedir
[root@binnary sourcedir ]# tar -zxvf linux-2.6.9.tar.gz
[root@binnary sourcedir ]# cd linux-2.6.9
[root@binnary linux-2.6.9 ]# vi Makefile
修改
ARCH ?= $(SUBARCH)
將$(SUBARCH)改為arm
# CROSS_COMPILE ?=(注釋掉) 然後新加一行
CROSS_COMPILE ?= arm-linux-
[root@binnary linux-2.6.9 ]# make menuconfig
然後設置順序如下(我對應的開發板上s3c2440,你的板子是什麼你找什麼選)
System Type --->
ARM system type (Samsung S3C2410) --->
S3C24XX Implementations --->\S3C2410(System Type->ARM System Type->/Samsung S3C2410)
[root@binnary linux-2.6.9 ]# make include/linux/version.h
[root@binnary linux-2.6.9 ]# mkdir -p /armtools/arm-linux/include
[root@binnary linux-2.6.9 ]# cp -dR include/asm-arm /armtools/arm-linux/include/asm
[root@binnary linux-2.6.9 ]# cp -dR include/linux /armtools/arm-linux/include/linux
[root@binnary linux-2.6.9 ]# cp -dR ~/tars/sourcedir/linux-2.6.9/include/asm-generic /armtools/arm-linux/include/

再下來編譯gcc-3.4.2
[root@binnary linux-2.6.9 ]# cd ~/tars/sourcedir
[root@binnary sourcedir ]# tar –jvxf gcc-core-3.4.2.tar.bz2
給gcc打一個補丁,在目錄gcc-3.4.2/gcc/下編輯一個文件flow.c.diff,內容如下
RCS file: /cvs/gcc/gcc/gcc/flow.c,v
retrieving revision 1.593
retrieving revision 1.594
diff -u -r1.593 -r1.594
--- gcc/gcc/flow.c 2004/07/09 03:29:32 1.593
+++ gcc/gcc/flow.c 2004/08/02 13:19:39 1.594
@@ -1865,19 +1865,22 @@
rtx set_src = SET_SRC (pc_set (BB_END (bb)));
rtx cond_true = XEXP (set_src, 0);
rtx reg = XEXP (cond_true, 0);
+ enum rtx_code inv_cond;
if (GET_CODE (reg) == SUBREG)
reg = SUBREG_REG (reg);
/* We can only track conditional lifetimes if the condition is - in the form of a comparison of a register against zero. - If the condition is more complex than that, then it is safe - not to record any information. */
- if (REG_P (reg)
+ in the form of a reversible comparison of a register against + zero. If the condition is more complex than that, then it is + safe not to record any information. */
+ inv_cond = reversed_comparison_code (cond_true, BB_END (bb));
+ if (inv_cond != UNKNOWN
+ && REG_P (reg)
&& XEXP (cond_true, 1) == const0_rtx)
{
rtx cond_false
- = gen_rtx_fmt_ee (reverse_condition (GET_CODE (cond_true)),
+ = gen_rtx_fmt_ee (inv_cond,
GET_MODE (cond_true),
XEXP (cond_true, 0),
XEXP (cond_true, 1));
if (GET_CODE (XEXP (set_src, 1)) == PC)
用此文件給flow.c打補丁,或者依此文件直接修改flow.c(修改前請備份這兩個文件),flow.c.diff該補丁用於產生crti.o和crtn.o文件。
[root@binnary gcc ]# patch flow.c –p1 < ../../flow.c.diff [root@binnary gcc ]# cd ~/tars/builddir
[root@binnary builddir ]# mkdir gcc-core
[root@binnary builddir ]# cd gcc-core
[root@binnary gcc-core ]# ../../sourcedir/gcc-3.4.2/configure --target=arm-linux --prefix=/armtools --enable-languages=c --disable-shared --disable-threads --without-headers --with-newlib
其中選項--enable-languages=c表示只支持C語言,--disable-threads表示去掉thread功能,這個功能需要glibc的支持。--disable-shared表示只進行靜態庫編譯,不支持共享庫編譯。
接下來執行編譯和安裝操作,命令如下:
[root@binnary gcc-core ]# make
[root@binnary gcc-core ]# make install

再再然後編譯安裝glibc
[root@binnary gcc-core ]# cd ~/tars/sourcedir
[root@binnary sourcedir ]# tar -zxvf glibc-2.3.5.tar.gz
[root@binnary sourcedir ]# cd glibc-2.3.5
[root@binnary glibc-2.3.5 ]# tar -jxvf ../glibc-linuxthreads-2.3.5.tar.gz
然後進行編譯配置,glibc-2.3.5配置前必須新建一個編譯目錄,否則在glibc-2.3.5目錄下不允許進行配置操作,此處在~/tars/builddir/目錄下建立名為glibc的目錄,配置操作如下:
[root@binnary glibc-2.3.5 ]# cd ~/tars/builddir
[root@binnary builddir ]# mkdir glibc
[root@binnary builddir ]# cd glibc
[root@binnary glibc ]# vi ~/tars/sourcedir/glibc2.3.5/sysdeps/unix/sysv/linux/arm/ioperm.c
將裡面的BUS_ISA改為CTL_BUS_ISA
98 static int
99 init_iosys (void)
100 {
101 char systype[256];
102 int i, n;
103 static int iobase_name[] = { CTL_BUS, CTL_BUS_ISA, BUS_ISA_PORT_BASE };
104 static int ioshift_name[] = { CTL_BUS, CTL_BUS_ISA, BUS_ISA_PORT_SHIFT };
105 size_t len = sizeof(io.base);
106
107 if (! sysctl (iobase_name, 3, &io.io_base, &len, NULL, 0)
108 && ! sysctl (ioshift_name, 3, &io.shift, &len, NULL, 0))
109 {
110 io.initdone = 1;
111 return 0;
112 }
[root@binnary glibc ]# vi ~/tars/sourcedir/glibc-2.3.5/Makeconfig
把裡面的-lgcc_eh都刪掉
505 ifneq ($(have-as-needed),yes)
506 libgcc_eh := -lgcc_eh $(libunwind)
507 else
508 libgcc_eh := -Wl,--as-needed -lgcc_s$(libgcc_s_suffix) $(libunwind) -Wl,--no-as-needed
509 endif
510 gnulib := -lgcc $(libgcc_eh)
511 static-gnulib := -lgcc -lgcc_eh $(libunwind)
512 libc.so-gnulib := -lgcc
513 endif
[root@binnary glibc ]# export CC=arm-linux-gcc
[root@binnary glibc ]# ~/tars/sourcedir/glibc-2.3.5/configure \
--prefix=/armtools/arm-linux \ --host=arm-linux \ --build=i686-pc-linux-gnu \ --with-headers=/armtools/arm-linux/include \ --enable-add-ons=linuxthreads
配置完後編譯和安裝 glibc
[root@binnary glibc ]# make
[root@binnary glibc ]# make install

最後編譯安裝gcc 的c, c++ 編譯器。
[root@binnary glibc ]# cd ~/tars/sourcedir/
[root@binnary sourcedir ]# tar -jxf gcc-g++-3.4.2.tar.bz2 [root@binnary sourcedir ]# cd ~/tars/builddir/
[root@binnary builddir ]# mkdir gcc
[root@binnary builddir ]# cd gcc
[root@binnary gcc ]# unset CC
[root@binnary gcc ]# ../../sourcedir/gcc-3.4.2/configure \
--prefix= /armtools\ --target=arm-linux \ --enable-languages=c,c++ \ --without-headers \ --disable-shared
[root@binnary gcc ]# make
[root@binnary gcc ]# make install

這就算是結束了.
測試的話你到/armtools/bin下寫一個c程序
例如#cd /armtools/bin
#vim c1.c
寫完之後#gcc -Wall -o c1 c1.c
如果你寫的c1.c裡面有調用math.h的話上面的命令變為
#gcc -Wall -o -lm c1 c1.c
完成之後#file c1.c
再#file c1
兩者對比一下
你會發現一個是基於ASC-II一個是基於ARM的
這就說明你搭建成功了
最後你可以把你的/armtools打個包,保存起來,以備日後使用

中間很多編譯的環節時間較長,如果一切順利的做完大概需要兩個小時.要有耐心哦

P.S. 終於完了,希望對你有幫助

閱讀全文

與lgcc是什麼電腦軟體相關的資料

熱點內容
平板電腦攻略2017 瀏覽:320
wifi隱藏了電腦怎麼連接win10 瀏覽:67
手機圖片怎麼恢復軟體 瀏覽:32
戴爾電腦很卡怎麼辦 瀏覽:726
錨怎麼連電腦 瀏覽:299
電腦單機殺毒軟體哪個好用 瀏覽:417
筆記本電腦硬碟串口線松怎麼辦 瀏覽:950
免費觀看會員電影網站 瀏覽:738
蘋果手機記事本軟體哪個好 瀏覽:20
遼陽免費建網站 瀏覽:187
如何查電腦有藍牙 瀏覽:675
電腦word文檔怎麼打字 瀏覽:533
舊台式電腦黑蘋果 瀏覽:74
電腦每次都要選擇系統是怎麼回事 瀏覽:474
如何查看win7電腦顯卡 瀏覽:650
蘋果千元軟體共享 瀏覽:230
鎖機軟體生成器手機版 瀏覽:620
jpg列印機電腦版 瀏覽:786
買電腦找哪個貼吧 瀏覽:349
電腦接功放哪個介面 瀏覽:209