当前位置:首页 » 编程软件 » 修复gcc编译器

修复gcc编译器

发布时间: 2022-05-21 11:43:02

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

❷ gcc编译问题

-c和-o都是gcc编译器的可选参数。-c表示只编译(compile)源文件但不链接,会把.c或.cc的c源程序编译成目标文件,一般是.o文件。-o用于指定输出(out)文件名。不用-o的话,一般会在当前文件夹下生成默认的a.out文件作为可执行程序。

❸ 用GCC编译器编译出来的程序运行出错,请高手帮忙解决!

#include<iostream>
usingnamespacestd;
intmain(void){
inti,sum=0;
for(i=1;i<=100;i++)
sum+=i;
cout<<sum<<endl;
return0;
}

code本身完全没有问题。我认为是你GCC没有安装或配置好。

❹ gcc编译器头文件处理

两次相对比一下,第二次增加了以下函数的实现,这部分是要编译成机器指令的,所以第二次这部分相当于是增加的。

intprintf(constchar*__format,...)
{
registerint__retval;
__builtin_va_list__local_argv;__builtin_va_start(__local_argv,__format);
__retval=__mingw_vprintf(__format,__local_argv);
__builtin_va_end(__local_argv);
return__retval;
}

那第二次减少了哪些呢?一点都没有,因为stdio这个头文件声明的函数和变量,都是在一个库中实现的,根本就不会包含在你的exe中,所以加不加stdio头文件没有区别。

要想验证这个也很简单:代码1

#include<stdio.h>
intmain(){return0;}

代码2:

intmain(){return0;}

比较这两次产生的exe是否一致即可。

注意,不能带有-g选项,-g选项会生成一些额外的调试信息

❺ 运行gcc编译器出现问题

返回码是1,,就说明你调用了无效的dos功能号。还有就是你的那个“winmain”函数没有定义。

❻ 为什么使用GCC编译器老是错误❌

是你的代码写错了,不是gcc的错
1.你的main函数要么只带2个参数,要么不带参数,你写的是带1个int参数,把int main(int xxx)的int xxx删去
2.char string ca[]是什么玩意??char就是char,string就是string,char string这种东西就跟写double int,vector map一样,根本不符合语法。我猜你可能是想写一个char数组,所以把string去掉即可

❼ 如何使用gcc编译器

双击GCC安装包,mingw-get-setup.exe,点击Install安装

2
点击Change选择安装路径,尽量不要有中文和空格,

3
将package 下面的mingw-***和mingw32-***和msys-**。都勾选上,等待下载安装,直到勾选框全部变成土灰色。

找到安装目录的bin目录,将路径右键复制下来。

找到计算机,右键,属性。点击  高级系统设置

找到下面的  环境变量  点击

在系统变量里面找到 Path变量,双击出现下面输入框,在变量值的末尾添加刚刚复制的bin目录,并在最后加上英文状态下 的分号(;)。点击确定。

测试是否安装成功,在cmd命令提示符里面输入 gcc --help 回车键,
出现以下信息,表示安装成功

EditPlus 3 安装完成之后的界面点击File 下的 new   C/C++

出现以下测试代码,保存到指定目录,最后不要有空格和中文,我保存到E:/My/Test下面测试。文件名为test.c 

命令提示符窗口进入到  E:/MyTest 下  用dir 命令显示当前目录下的所有文件。

使用gcc 命令编译   命令格式 如下  gcc test.c - o test 回车键
编译完成 

直接输入test运行,输出hello,world.
测试完成

❽ GCC编译器问题

是在这里来设置:

【Settings】【Compiler】【Toolchain executables】

codeblocks可能找不到所需要的可执行文件,你需要手动指定文件,比如上面的mingw32-gcc.exe,在我电脑里对应的是x86_64-w64-mingw32-g++.exe

❾ 在用gcc编译apache的时候出现编译器错误怎么办

问题分析:gcc编译器会根据你系统的头文件而产生一些合适的编译参数,如果你升级完系统后没有升级gcc,那么有可能出现这种错误,一般是提示readv、writev或者uio.h出错。
解决:重新安装gcc。

❿ 这C++里面的GCC编译器出现的问题怎么办

是1.exe当中出现了非法的构造函数
确认一下代码中的构造函数或者对构造函数的使用有没有问题

热点内容
java返回this 发布:2025-10-20 08:28:16 浏览:705
制作脚本网站 发布:2025-10-20 08:17:34 浏览:968
python中的init方法 发布:2025-10-20 08:17:33 浏览:676
图案密码什么意思 发布:2025-10-20 08:16:56 浏览:828
怎么清理微信视频缓存 发布:2025-10-20 08:12:37 浏览:737
c语言编译器怎么看执行过程 发布:2025-10-20 08:00:32 浏览:1076
邮箱如何填写发信服务器 发布:2025-10-20 07:45:27 浏览:308
shell脚本入门案例 发布:2025-10-20 07:44:45 浏览:188
怎么上传照片浏览上传 发布:2025-10-20 07:44:03 浏览:875
python股票数据获取 发布:2025-10-20 07:39:44 浏览:829