當前位置:首頁 » 編程軟體 » 高版本gcc編譯失敗

高版本gcc編譯失敗

發布時間: 2022-09-23 07:17:32

⑴ GCC編譯連接問題stl_algobase.h:343: undefined reference to

這個錯誤非常常見,高版本的gcc編譯器的庫文件,常有改動,文件名或者變數名都有可能相對於低版本gcc發生變化。

我的解決辦法是,找出編譯平台也就是4.4.7版本里的對應的頭文件或者變數名函數名,修改你的代碼中所有include或者引用的地方。

因為你的編譯平台是447. 你是基於463構建的工程,引用的頭文件肯定有些是 447里不具備的或者名字路徑不一樣的。

⑵ 跪求arm-linux-gcc編譯出錯解決方法,請高手不吝賜教!

貌似缺少庫文件或其版本不匹配,將所缺的版本的庫文件裝上應該就可以了。

⑶ 用高版本編譯低版本gcc的問題

據說要低版本的才能編譯高版本的

⑷ Linux gcc編譯不成功:<stdio.h>:no such file or directory

應該是你沒有安裝標准庫,debian下的名字是libstdc,你rpm的話,拿stdc,libc查查看吧

⑸ gcc 編譯失敗

用帶-w選項的gcc即可關閉警告,例如: gcc -w a.c 極不推薦這么做,會讓你養成非常不好的編碼習慣 ********************************************* 程序不完整,GCC是對ANSI C遵循最嚴格的編譯器,這樣隨意的代碼當然無法編譯,修改如下: #include <stdio.h> /*注意這里*/ int main(void) /*注意這里*/ { int a,b; for (a=1;a<=100;a++) { for (b=2;b<=a;b++) { if((a%b)==0) { if(a==b) printf ("%d \n",a); else break; } } } return 0; /*注意這里*/ }

⑹ gcc升級編譯時出現這個錯誤該怎麼解決

在你的main函數中,有個叫做delay的出問題了。字面意思是你的這個delay同名了。你看看你是不是有好幾個delya子函數?方法1,將你的函數名字更改。比如delay1什麼的。方法二,太麻煩不說了。

⑺ 為什麼我用GCC編譯最簡單的hello.c文件,出現很多錯誤

原因:

  1. gcc安裝未成功。

  2. hello.c中引入的頭文件錯誤或者為引入正確的頭文件。

  3. hello.c中編碼有錯誤。

⑻ 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.

⑼ 新手 啊哈c 編譯失敗 什麼原因啊

哈哈,這是什麼編譯器,挺帶感啊,話說你這編譯器不帶錯誤提示嗎,就是提示出了什麼錯誤的那種

⑽ 求助 線程問題 gcc編譯通過 g++編譯失敗

C++禁止將void指針隨意賦值給其他指針。
因此你在把void thread(void)函數的入口轉換為void*,然後當作參數調用pthread_create時就出現錯誤,因為pthread_create的參數里應該是指向形如void* fun(void*)函數的一個指針。

可以修改void thread(void)為void* thread(void*),然後去掉調用時的(void*)強制轉換,錯誤消除。

熱點內容
安卓手機如何破九宮鎖 發布:2024-04-24 10:05:47 瀏覽:676
攝像頭要什麼樣的配置好 發布:2024-04-24 09:30:24 瀏覽:365
存儲過程定義多個變數 發布:2024-04-24 09:04:13 瀏覽:762
為什麼安卓手機不值錢 發布:2024-04-24 09:02:40 瀏覽:100
拱度計演算法 發布:2024-04-24 08:53:09 瀏覽:290
windowsefs加密 發布:2024-04-24 08:51:30 瀏覽:879
英雄聯盟和飢荒哪個配置要求更高 發布:2024-04-24 07:55:09 瀏覽:604
linuxcpu佔用進程 發布:2024-04-24 07:37:05 瀏覽:120
河南移動鶴壁dns伺服器地址 發布:2024-04-24 07:36:58 瀏覽:594
百度賬號密碼怎麼設置密碼 發布:2024-04-24 07:27:37 瀏覽:759