Gcc编译器(Gcc For Windows)

大小:12.43M类别:调试编译

官方安全无插件纠错

  • 更新时间2023-11-11
  • 系统Pc
  • 语言简体中文
Gcc编译器是GNU开发的编程语言编译器,由GPL许可证所发现的自由软件。它可处理多种编程语言,如C语言、Fortran、Pascal、Objective-C、Java和Ada以及各类处理器架构上的汇编语言等。Gcc编译器的外部接口类似一个标准的Unix编译器,用户可在命令列下键入Gcc之程序名,以及一些命令参数,以此可方便用户决定每个输入档案使用的个别语言编译器,并为输出程序码使用适合此硬件平台的组合语言编译器,并且选择性地执行连接器以制造可执行的程序。在Gcc编译器中每个语言编译器都是独立程序,而这些程序可处理输入的原始码,并输出组合语言码。同时全部的语言编译器都拥有共通的中介架构:一个前端解析符合此语言的原始码,并产生一抽象语法树,以及一翻译此语法树成为GCC的暂存器转换语言〈RTL〉的后端。Gcc编译器的接口主要分为前端接口、中介接口和后端接口,每个接口都为用户提供不同的功能。其中前端接口主要是用于产生一个可让后端处理之语法树,而中介接口主要有消解死码、消解重复运算与全域数值重编码等功能。
gcc编译器官方下载

gcc编译器安装教程

一、安装了MinGW,在其根目录下的bin文件夹中发现有等文件。为了测试,在该文件夹中新建了一个test.bat文件,将其中内容写为:gcc test.cpp
二、在该文件夹中创建test.cpp文件并将其内容设置为:
1.双击test.bat文件,发现该文件夹中产生了一个a.exe文件,执行该exe文件,发现其与预期编译效果一致,说明编译成功。gcc –o name test.cpp
2.可以生成名为name.exe的可执行程序
3.把指令改为gcc –e test.cpp >test.txt 后,提示错误gcc: no input files
4.而把参数E改为大写之后问题即解决:gcc –E test.cpp > test.txt

Gcc编译器电脑版使用方法

一、Gcc编译器常用选项
1.编译选项
gcc有超过100个的编译选项可用。具体的可以使用命令man gcc察看
2.优化选项
用GCC编译C/C++代码时,它会试着用最少的时间完成编译并且编译后的代码易于调试。易于调试意味着编译后的代码与源代码有同样的执行顺序,编译后的代码没有经过优化。有很多的选项可以告诉GCC在耗费更多编译时间和牺牲易调试性的基础上产生更小更快的可执行文件。这些选项中最典型的就是-O和-O2。-O选项告诉gcc对源代码进行基本优化。-O2选项告诉GCC产生尽可能小的和尽可能快的代码。还有一些很特殊的选项可以通过man gcc察看
3.调试和剖析选项
GCC支持数种调试剖析选项。在这些选项中最常用的是-g和-pg.-g选项告诉gcc产生能被GNU调试器(如gdb)使用的调试信息,以便调试用户的程序。-pg选项告诉gcc在用户的程序中加入额外的代码,执行时,产生gprof用的剖析信息以显示程序的耗时情况
二、使用GDB方法
1.在命令行中键入gdb并按回车就可以运行gdb了,启动gdb后,能在命令行上制定很多的选项,也可以下面的方式来运行gdb: gdb filename 用这种方式运行gdb时,能直接指定想要调试的程序。在命令行上健入gdb -h得到一个有关gdb的选项的说明简单列表
2.编译代码以供调试,为了使gdb工作,必须使程序在编译时包含调试信息,调试信息包含程序里的每个变量的类型,在可执行文件里的地址映射以及源代码的行号。gdb利用这些信息使源代码和机器码相关联
三、内容错误查找
1.运行 gdb bugging 命令,装入 bugging 可执行文件
2.执行装入的 bugging 命令
3.使用 where 命令查看程序出错的地方
4.利用 list 命令查看调用 gets 函数附近的代码
5.唯一能够导致 gets 函数出错的因素就是变量string,用print命令查看string的值
6.在 gdb 中,我们可以直接修改变量的值,只要将 string 取一个合法的指针值就可以了,为此,我们在第11行处设置断
7.程序重新运行到第11行处停止,这时,我们可以用 set variable 命令修改 string 的取值
8.然后继续运行,将看到正确的程序运行结果

使用示例

一、示例代码
int main(void)
{printf("hello\n")
 return 0
二、预编译过程
1.这个过程处理宏定义和include,并做语法检查
2.可以看到预编译后,代码从6行扩展到了910行
三、编译过程
这个阶段,生成汇编代码
四、汇编过程
1.这个阶段,生成目标代码
2.此过程生成ELF格式的目标代码
五、链接过程
链接过程。生成可执行代码。链接分为两种,一种是静态链接,另外一种是动态链接。使用静态链接的好处是,依赖的动态链接库较少,对动态链接库的版本不会很敏感,具有较好的兼容性;缺点是生成的程序比较大。使用动态链接的好处是,生成的程序比较小,占用较少的内存
六、程序运行
七、以hello.c为例子,在这四个步骤中可以设置选项分别生成hello.i, hello.s, hello.o以及最终的hello文件:
hello.c: 最初的源代码文件
hello.i: 经过编译预处理的源代码
hello.s: 汇编处理后的汇编代码
hello.o: 编译后的目标文件,即含有最终编译出的机器码,但它里
面所引用的其他文件中函数的内存位置尚未定义
hello / a.out: 最终的可执行文件

Gcc编译器结构

GCC的外部接口长得像一个标准的Unix编译器。使用者在命令列下键入gcc之程序名,以及一些命令参数,以便决定每个输入档案使用的个别语言编译器,并为输出程序码使用适合此硬件平台的组合语言编译器,并且选择性地执行连接器以制造可执行的程序
每个语言编译器都是独立程序,此程序可处理输入的原始码,并输出组合语言码。全部的语言编译器都拥有共通的中介架构:一个前端解析符合此语言的原始码,并产生一抽象语法树,以及一翻译此语法树成为GCC的暂存器转换语言〈RTL〉的后端。编译器最佳化与静态程序码解析技术(例如FORTIFY_SOURCE,一个试图发现缓冲区溢位〈buffer overflow〉的编译器)在此阶段应用于程序码上。最后,适用于此硬件架构的组合语言程序码以Jack Davidson与Chris Fraser发明的算法产出。几乎全部的GCC都由C写成,除了Ada前端大部分以Ada写成
1、前端接口
前端的功能在于产生一个可让后端处理之语法树。此语法解析器是手写之递归语法解析器
直到2004年,程序的语法树结构尚无法与欲产出的处理器架构脱钩。而语法树的规则有时在不同的语言前端也不一样,有些前端会提供它们特别的语法树规则
在2005年,两种与语言脱钩的新型态语法树纳入GCC中。它们称为GENERIC与GIMPLE。语法解析变成产生与语言相关的暂时语法树,再将它们转成GENERIC。之后再使用"gimplifier"技术降低GENERIC的复杂结构,成为一较简单的静态唯一形式(Static Single Assignment form,SSA)基础的GIMPLE形式。此形式是一个与语言和处理器架构脱钩的全域最佳化通用语言,适用于大多数的现代编程语言
2、中介接口
一般编译器作者会将语法树的最佳化放在前端,但其实此步骤并不看语言的种类而有不同,且不需要用到语法解析器。因此GCC作者们将此步骤归入通称为中介阶段的部分里。此类的最佳化包括消解死码、消解重复运算与全域数值重编码等。许多最佳化技巧也正在实作中
3、后端接口
GCC后端的行为因不同的前处理器宏和特定架构的功能而不同,例如不同的字符尺寸、呼叫方式与大小尾序等。后端接口的前半部利用这些讯息决定其RTL的生成形式,因此虽然GCC的RTL理论上不受处理器影响,但在此阶段其抽象指令已被转换成目标架构的格式
GCC的最佳化技巧依其释出版本而有很大不同,但都包含了标准的最佳化算法,例如循环最佳化、执行绪跳跃、共通程序子句消减、指令排程等等。而RTL的最佳化由于可用的情形较少,且缺乏较高阶的资讯,因此相比较起来,增加的GIMPLE语法树形式,便显得比较不重要
后端经由一次重读取步骤后,利用描述目标处理器的指令集时所取得的信息,将抽象暂存器替换成处理器的真实暂存器。此阶段非常复杂,因为它必须关注所有GCC可移植平台的处理器指令集的规格与技术细节
后端的最后步骤相当公式化,仅仅将前一阶段得到的汇编语言代码藉由简单的子例程转换其暂存器与内存位置成相对应的机器码

文件类型

.c为后缀的文件,C语言源代码文件
.a为后缀的文件,是由目标文件构成的档案库文件
.C,.cc或.cxx 为后缀的文件,是C++源代码文件且必须要经过预处理
.h为后缀的文件,是程序所包含的头文件
.i 为后缀的文件,是C源代码文件且不应该对其执行预处理
.ii为后缀的文件,是C++源代码文件且不应该对其执行预处理
.m为后缀的文件,是Objective-C源代码文件
.mm为后缀的文件,是Objective-C++源代码文件
.o为后缀的文件,是编译后的目标文件
.s为后缀的文件,是汇编语言源代码文件
.S为后缀的文件,是经过预编译的汇编语言源代码文件

Gcc编译器参数

在使用GCC编译器的时候,我们必须给出一系列必要的调用参数和文件名称。GCC编译器的调用参数大约有100多个,这里只介绍其中最基本、最常用的参数。具体可参考GCC Manual:
GCC最基本的用法是∶gcc [options] [filenames]其中options就是编译器所需要的参数,filenames给出相关的文件名称
-c 只编译,不链接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。
-o output_filename,确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out。
-g 产生符号调试工具(GNU的gdb)所必要的符号资讯,要想对源代码进行调试,我们就必须加入这个选项。
-O 对程序进行优化编译、链接,采用这个选项,整个源代码会在编译、链接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是,编译、链接的速度就相应地要慢一些
-O2比-O更好的优化编译、链接,当然整个编译、链接过程会更慢
-Idirname,将dirname所指出的目录加入到程序头文件目录列表中,是在预编译过程中使用的参数。C程序中的头文件包含两种情况∶
A)#include
B)#include “myinc.h”
其中,A类使用尖括号(< >),B类使用双引号(“ ”)。对于A类,预处理程序cpp在系统预设包含文件目录(如/usr/include)中搜寻相应的文件,而B类,预处理程序在目标文件的文件夹内搜索相应文件
-v gcc执行时执行的详细过程,gcc及其相关程序的版本
-llibrary 制定编译的时候使用的库,例子用法gcc -lcurses hello.c使用ncurses库编译程序
-Ldir 制定编译的时候,搜索库的路径。比如你自己的库,可以用它制定目录,不然编译器将只在标准库的目录找。这个dir就是目录的名称。   
-gstabs 此选项以stabs格式声称调试信息,但是不包括gdb调试信息.  
-gstabs+ 此选项以stabs格式声称调试信息,并且包含仅供gdb使用的额外调试信息.
-ggdb 此选项将尽可能的生成gdb的可以使用的调试信息.
-static 此选项将禁止使用动态库,所以,编译出来的东西,一般都很大,也不需要什么 动态连接库,就可以运行.
-share 此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库.
-traditional 试图让编译器支持传统的C语言特性
-fno-asm 此选项实现ansi选项的功能的一部分,它禁止将asm,inline和typeof用作
-fno-strict-prototype 只对g++起作用,使用这个选项,g++将对不带参数的函数,都认为是没有显式的对参数的个数和类型说明,而不是没有参数,而gcc无论是否使用这个参数,都将对没有带参数的函数,认为城没有显式说明的类型
-fthis-is-varialble 就是向传统c++看齐,可以使用this当一般变量使用.
-fcond-mismatch 允许条件表达式的第二和第三参数类型不匹配,表达式的值将为void类型
-funsigned-char
-fno-signed-char
-fsigned-char
-fno-unsigned-char
这四个参数是对char类型进行设置,决定将char类型设置成unsigned char(前两个参数)或者 signed char(后两个参数)
-include file 包含某个代码,简单来说,就是便以某个文件,需要另一个文件的时候,就可以用它设定,功能就相当于在代码中使用#include
例子用法:
gcc hello.c -include /root/pianopan.h
-imacros file 将file文件的宏,扩展到gcc/g++的输入文件,宏定义本身并不出现在输入文件中
-Dmacro 相当于C语言中的#define macro
-Dmacro=defn 相当于C语言中的#define macro=defn
-Umacro 相当于C语言中的#undef macro
-undef 取消对任何非标准宏的定义
-Idir 在你是用#include"file"的时候,gcc/g++会先在当前目录查找你所制定的头文件,如果没有找到,他回到缺省的头文件目录找,如果使用-I制定了目录,他回先在你所制定的目录查找,然后再按常规的顺序去找.对于#include,gcc/g++会到-I制定的目录查找,查找不到,然后将到系统的缺省的头文件目录查找
-I- 就是取消前一个参数的功能,所以一般在-Idir之后使用
-idirafter dir 在-I的目录里面查找失败,讲到这个目录里面查找.
-iprefix prefix
-iwithprefix dir 一般一起使用,当-I的目录查找失败,会到prefix+dir下查
-nostdinc 使编译器不再系统缺省的头文件目录里面找头文件,一般和-I联合使用,明确限定头文件的位置
-nostdin C++ 规定不在g++指定的标准路经中搜索,但仍在其他路径中搜索,.此选项在创建libg++库使用
-C 在预处理的时候,不删除注释信息,一般和-E使用,有时候分析程序,用这个很方便的  
-M 生成文件关联的信息。包含目标文件所依赖的所有源代码,你可以用gcc -M hello.c来测试一下,很简单。  
-MM 和上面的那个一样,但是它将忽略由#include造成的依赖关系。  
-MD 和-M相同,但是输出将导入到.d的文件里面
-MMD 和-MM相同,但是输出将导入到.d的文件里面
-Wa,option 此选项传递option给汇编程序;如果option中间有逗号,就将option分成多个选项,然后传递给会汇编程序

执行程序

1、Pre-Processing预处理
gcc  -E  hello.c  -o  hello.i //完成头文件和宏定义的展开,生成hello.i预处理文件
2、Compiling编译
gcc  -S  hello.i //生成汇编代码,生成hello.s的汇编文件
3、Assembling  汇编
gcc  -c  hello.s //生成二进制目标文件,生成hello.o文件
4、Linking 链接
gcc  hello.o  -o  hello //链接相关库,生成可执行文件hello,没有后缀
PS:一般生成可执行程序,可以直接:gcc  hello.c  -o  hello

Gcc编译器命令

在gdb提示符处键入help,将列出命令的分类,主要的分类有:
aliases:命令别名
breakpoints:断点定义
data:数据查看
files:指定并查看文件
internals:维护命令
running:程序执行
stack:调用栈查看
statu:状态查看
tracepoints:跟踪程序执行
键入help后跟命令的分类名,可获得该类命令的详细清单:
break NUM 在指定的行上设置断点
bt 显示所有的调用栈帧。该命令可用来显示函数的调用顺序
clear 删除设置在特定源文件、特定行上的断点。其用法为:clear FILENAME:NUM
continue 继续执行正在调试的程序。该命令用在程序由于处理信号或断点而导致停止运行时
display EXPR 每次程序停止后显示表达式的值。表达式由程序定义的变量组成
file FILE 装载指定的可执行文件进行调试
help NAME 显示指定命令的帮助信息
info break 显示当前断点清单,包括到达断点处的次数等
info files 显示被调试文件的详细信息
info func 显示所有的函数名称
info local 显示当函数中的局部变量信息
info prog 显示被调试程序的执行状态
info var 显示所有的全局和静态变量名称
kill 终止正被调试的程序
list 显示源代码段
make 在不退出 gdb 的情况下运行 make 工具
next 在不单步执行进入其他函数的情况下,向前执行一行源代码
print EXPR 显示表达式 EXPR 的值

Gcc编译器处理器架构

Alpha
ARM
Atmel AVR
Blackfin
H8/300
IA-32〈x86〉 与x86-64
IA-64例如:Itanium
MorphoSys 家族
Motorola 68000
Motorola 88000
MIPS
PA-RISC
PDP-11
PowerPC
System/370,System/390
SuperH
HC12
SPARC
VAX
Renesas R8C/M16C/M32C家族
A29K
ARC
C4x
CRIS
D30V
DSP16xx
FR-30
FR-V
Intel i960
IP2000
M32R
68HC11
MCORE
MMIX
MN10200
MN10300
NS32K
ROMP
Stormy16
V850
Xtensa
D10V
MicroBlaze
PDP-10
MSP430
Z8000

展开内容

猜您喜欢

c语言编译器大全

学习C语言编程,离不开C语言编译器和集成开发工具的支持。C语言编译器是将C语言编写的程序源文件翻译成二进制可执行代码的软件。市面上C语言编译器有非常多,到底哪个好?小编经过测试,着重推荐Gcc编译器、Clang编译器、turbo c、DevC++这些C语言编译器。它们不仅编译速度和效率非常高,而且支持多平台操作,欢迎有需要的朋友下载支持!

共有 9 款应用全部>>

类似软件

  • GDA反编译工具 5.82M GJoy Dex Analysizer官方版简称GDA,它是一款全交互式的现代反编译工具,它不仅只是反编译工具,同时也是一款轻便且功能强大的综合性逆向分析利器,其不依赖java且支持apk、dex、odex、oat、jar、aar、class文件的

  • JetBrains dotPeek 2023官方版 86.68M dotPeek 2023是一款基于 ReSharper 捆绑反编译器的免费独立工具。这款反编译器支持包括库 (.dll)、可执行文件 (.exe) 和 Windows 元数据文件 (.winmd) 在内的多种格式。反编译后的代码可以另存为Visual S

  • dotPeek 2022官方版 83.13M dotPeek 2022官方版是JetBrains公司推出的一款免费的.net反编译工具,它是一个基于ReSharper捆绑反编译器的免费独立工具。反编译来源生成项目之后,用户不需要离开dotPeek就能够浏览项目文件。而且,Dotpeek也可以作为一个

  • 调试大叔官方版 2.96M 调试大叔官方版是一款实用的脚本调试工具,可以大大节约了程序员们的时间,功能强大,例如内置一批动态参数,可应用于URL、页头、参数例如直接如生成随机数、URL编码、时间戳/日期转换、HTML转义等。自动保存您的调试记录,然后在重复使用时可以直接应用,同时,

网友评论

0人参与,0条评论
  • 评论需审核后才能显示

同类排行

  • RSLogix5000官方版 7.8G RSLogix5000全称为Rockwell Studio 5000,是由罗克韦尔推出一款集成开发环境,旨在通过增强的安全性帮助将智能机器更快地推向市场。该软件主要包括最佳的数字设计功能,可帮助减少机器设计时间以及测试和调试时间。除此之外,这款软件界面简

  • WinDbg(分析dump文件) 30.19M WinDbg完整版是一款微软官方推出的在Windows平台下使用的强大的用户态和内核态调试工具,相比较许多用户熟知的VS(Visual Studio),这是一个轻量级的调试工具,文件大小很小,倒是因为只有调试功能,所以软件的功能要比我们的VS更好,除此之

  • USBWebserver 22.2M USBWebserver是一款功能实用且一键式电脑本地快速架设PHP网站环境的工具,尤其是针对USB移动设备进行设计开发,可以很好的兼容各种USB外接口的存储设备,其中包括U盘,移动硬盘等都可进行数据保存,这样就没有电脑设备的时间地点限制了,随时便可进行

  • 串口调试助手(CM精装版) 627K 串口调试助手(CM精装版)一款功能实用,操作简单的串口调试软件。使用方便,超级稳定,不死机,不丢包,串口自动识别,支持COM9以上串口,支持多串口调试,支持历史发送记录,广泛支持各种波特率,高达10 Mbps以上波特率,具体和电脑硬件有关,支持云端同步,

  • luyten反编译工具 3.83M luyten官方版是一款专为java程序开发的反编译工具,支持.jar、.zip、.class等类型的文件,并对这些文件进行反编译操作,软件的反编译程度非常高,能够轻松让用户获得最完整、最准确的java源代码。 luyten支持显示导入、类型、合成组件

  • ONVIF Device Test Tool(ONVIF测试工具) 15.67M ONVIF Device Test Tool是一款免费的ONVIF设备测试工具软件。

  • SourceTree(Git/Mercurial客户端)官方版 34.1M SourceTree官方版是一款在windows系统中免费使用的Git和Hg客户端的管理工具,可以支持创建、克隆、提交、push、pull、合并等操作。软件的使用界面比较简洁,大大简化了开发者和代码库之间的Git操作方式,让那些不熟悉Git命令的开发者也

  • dotPeek 2022官方版 83.13M dotPeek 2022官方版是JetBrains公司推出的一款免费的.net反编译工具,它是一个基于ReSharper捆绑反编译器的免费独立工具。反编译来源生成项目之后,用户不需要离开dotPeek就能够浏览项目文件。而且,Dotpeek也可以作为一个

  • powershell studio 2022官方版(脚本编辑器软件) 512.98M powershell studio 2022官方版是一款高效、专业、实用的脚本编辑器软件,其最强悍的编辑功能,它能够让你的工作更加简便化,再加上功能齐全的PowerShell 编辑器、全面的脚本调试器、高级函数的函数生成器等功能,可以让用户们快速的调试代

  • clang(C语言编译器) 22.21M 许多用户都知道软件编程需要用到许许多多的编译器,今天小编就带给大家一款将C语言、C++等C有关的语言的轻量级编译器,能够让用户轻松实现C语言方面的编程。这款clang电脑版能够快速的进行相关的编译,而且所占内存少,也不会消耗用户大量的资源,不像一些集成环

  • Mercurial(轻量级分布式版本控制系统) 14.9M Mercurial电脑版是一款非常优秀的分布式版本控制系统(DCVS),Mercurial英文意为水银,所以常被缩写为Hg。采用Python语言实现,具有高效率、跨平台、可扩展、使用简便且开源等优点,是目前最为流行的版本控制工具之一。Mercurial电

  • x64dbg中文版 32.75M x64dbg是一款开源且功能强大的x64/x32位二进制调试器。x64dbg具有简洁的界面以及强大的功能,提供了类似C的表达式解析器、全功能的DLL和EXE文件调试、IDA般的侧边栏与跳跃箭头、动态识别模块和串、快反汇编、可调试的脚本语言自动化等多项实用

  • MinGW编译器官方版 132.03M MinGW不是软件,确是一个非常重要的东西,和jre的功能有点一样,jre是为我们的java程序提供环境,而它则是为我们的C/C++提供环境的运行库。这个环境的全称为Minimalist GNU for Windows,是一个可自由使用和自由发布的win

  • 调试大叔官方版 2.96M 调试大叔官方版是一款实用的脚本调试工具,可以大大节约了程序员们的时间,功能强大,例如内置一批动态参数,可应用于URL、页头、参数例如直接如生成随机数、URL编码、时间戳/日期转换、HTML转义等。自动保存您的调试记录,然后在重复使用时可以直接应用,同时,

  • Awen串口调试助手绿色版 87K Awen串口调试助手绿色版是一款非常好用的串口调试工具。软件支持300-115200bps波特率的调试,但是大于15000的就得需要专门的设置支持才可进行调试,其在数据接收及发送上,用户都可以以十六进制的方式来进行操作,此外,用户也可以在接收数据上