Gcc特点

Gcc基本用法

1、gcc的概念

GCC(GNU Compiler Collection,GNU编译器套装),是一款由GNU开发的编程语言编译器。GCC原名为GNU C 语言编译器,因为它原本只能处理C语言。GCC很快地扩展,变得可处理C++。之后也变得可处理Fortran、Pascal、Objective-C、java,以及Ada与其他语言。

2、GCC的执行过程

使用GCC,把C语言源代码文件生成可执行文件的过程不仅仅是编译的过程,而是要经历四个相互关联的步骤:预处理(也称为预编译,Preprocessing)、编译(compilation)、汇编(assembly)、和链接(linking)。

命令gcc首先调用cpp进行预处理,在预处理过程中,对源代码文件中的文件包含(include)、预编译语句(如宏定义define等)进行分析。接着调用cc1进行编译,这个阶段根据输入文件生成以.o为后缀的目标文件。汇编过程是针对汇编语言的步骤,调用as进行工作,一般来讲,.S为后缀的汇编语言源代码文件和汇编.s为后缀的汇编语言文件经过预编译和汇编之后都生成以.o为后缀的目标文件。当所有的目标文件都生成以后,gcc就调用ld来完成最后的关键性工作,这个阶段就是链接。在链接阶段,所有的目标文件被安排在可执行程序中的恰当的位置,同时该程序所调用的库函数也从各自所在的库中连到合适的地方。以上这些过程是gcc内部实现的机制,实际使用中,上述过程可以通过gcc的选项实现。

gcc命令的一般格式为:gcc [选项] 要编译的文件 [选项] [目标文件] eg:gcc hello.c -o hello;本过程实际上将预处理、编译、汇编、链接一步完成。下面分别介绍每个流程

执行预处理工作:gcc -E hello.c -o hello.i  生成hello.i

执行编译处理工作:gcc -S hello.i -o hello.s生成汇编文件hello.s

执行编译工作:gcc -c hello.s -o hello.o  对hello.s进行汇编,生成目标文件hello.o

执行链接工作:gcc hello.o -o hello

编译选项

使用-g选项,在可执行程序中包含标准调试信息。使用命令gcc -g hello.c -o hello2生成包含调试信息的文件hello2,带有调试信息的可执行文件可以使用gdb调试器进行调试。

使用-D选项,在编译时进行宏定义。使用命令gcc -DLINUX hello.c -o hello3生成了宏LINUX的可执行文件hello3。

使用-O2选项,完成程序的优化工作。

time ./hello 测试hello可执行文件的执行时间。

-Wall:生成所有的警告信息

-w:不生成任何警告信息

-DMACRO:使用-D定义MACRO宏,等效于在程序中使用#define MACRO

每一个编译器都有标准的寻找头文件的路径!!!!gcc会在/usr/include/下面去找

-I dirname:将dirname所指出的目录作为编译器寻找头文件的标准路径。对于<>,gcc在系统预设的头文件目录(如/usr/include)中搜寻相应的文件;而对于"",gcc在当前目录中搜寻头文件。-I作用是告诉gcc,如果在当前目录未找到需要的头文件,就到指定的dirname目录中去寻找:eg:gcc foo.c -I /home/include -o foo

-static 将产生一个和static库一道链接的可执行文件。当没有开启-static选项时,链接器首先试着用共享库,假如共享版本不可用,然后再试着用静态库。

-shared 告诉gcc产生一个共享库,该共享库能在链接时和其他的共享文件一起形成可执行文件,该共享库也能在运行时装载进可执行文件的地址空间,使用-shared是创建一个共享ELF库的首选方法。

part1:13-linux编译器GCC的更多相关文章

  1. Linux 之 编译器 gcc/g++参数详解

    2016年12月9日16:48:53 ----------------------------- 内容目录: [介绍] gcc and g++分别是gnu的c & c++编译器 gcc/g++ ...

  2. 【Linux开发】如何在./configure的时候将编译参数传入,改变默认的编译器gcc成arm-linux-gcc

    如何在configure时,将编译参数传入,改变默认的编译器gcc成arm-linux-gcc [问题] 想要用交叉编译工具arm-linux-gcc去编译lrzsz, 但是在./configure的 ...

  3. MinGW-w64安装教程——著名C/C++编译器GCC的Windows版本

    本文主要讲述如何安装 C语言 编译器——MinGW-w64,特点是文章附有完整详细的实际安装过程截图,文字反而起说明提示作用. 编写本文的原因始于我的一个观点:图片可以比文字传达更多的信息,也能让其他 ...

  4. MinGW安装教程——著名C/C++编译器GCC的Windows版本

    前言本文主要讲述如何安装 C语言 编译器——MinGW,特点是文章附有完整详细的实际安装过程截图,文字反而起说明提示作用. 编写本文的原因始于我的一个观点:图片可以比文字传达更多的信息,也能让其他人更 ...

  5. 《⑨也懂系列:MinGW-w64安装教程》著名C/C++编译器GCC的Windows版本(MinGW-w64在安装的时候可以选择版本,有图,一步一步)

    发布日期 2016年10月31日 分类 教程 标签 编程.软件 前言<⑨也懂系列:MinGW-w64安装教程>这篇文章由 rsreland (http://rsreland.net)于 2 ...

  6. Linux下Gcc生成和使用静态库和动态库详解

    参考文章:http://blog.chinaunix.net/uid-23592843-id-223539.html 一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库 ...

  7. 详解Linux安装GCC方法

    转载自:http://blog.csdn.net/bulljordan23/article/details/7723495/ 下载: http://ftp.gnu.org/gnu/gcc/gcc-4. ...

  8. linux 安装gcc和g++

    linux中安装gcc和g++ 今天在linux的服务器上安装C/C++的编译器gcc和g++,运行了如下两条命令: 1 yum install gcc yum install g++ 然后发现gcc ...

  9. 在Linux使用GCC编译C语言共享库

    在Linux使用GCC编译C语言共享库 对任何程序员来说库都是必不可少的.所谓的库是指已经编译好的供你使用的代码.它们常常提供一些通用功能,例如链表和二叉树可以用来保存任何数据,或者是一个特定的功能例 ...

随机推荐

  1. sql server自增列值的获取

    IDENT_CURRENT(tbname) 是看表对象.所以没有受作用域限制. SCOPE_IDENTITY()  受作用域限制.同一个会话里面不同作用域也会有差异 @@IDENTITY  受会话限制 ...

  2. Linux命令详解----iostat

    Linux系统出现了性能问题,一般我们可以通过top.iostat.free.vmstat等命令来查看初步定位问题.在一个以前看到系统监控工具,总在想那些监控工具的代理,如何收集系统性能信息,io性能 ...

  3. 新提示风格Hint BalloonHint 气泡

    Hint BalloonHint1新风格的提示,好看漂亮,对其他控件都起作用,TCSpinButton却不起作用XE7里也不行??Hint for (int i = 0; i < this-&g ...

  4. ADODB 调用存储过程

    追加参数法调用存储过程 追加参数通过CreateParameter方法,用来指定属性创建新的Parameter对象.具体语法如下: Set parameter = command.CreatePara ...

  5. eclipse在运行main方法时在console里面报内存溢出的错误解决办法

    修改JVM的配置. window-->preferences-->Java-->installedJres选中使用的jdk/jre版本 点击右边的edit在弹出的对话框中的[Defa ...

  6. ICE中间件相关

    Ice 是 网络通信引擎 Internet Communications Engine 的简称,是ZeroC开发的一个面向对象的中间件平台.它提供了面向对象的远程过程调用.网格计算和发布/订阅功能,并 ...

  7. Java web struct入门基础知识

    1.Struts2的前身是Opensymphony的Webwork2,实际上Strut和Webwork2合并后形成Struts2.   2.一个HelloWord示例 1)创建Web应用,所需要的Ja ...

  8. mark_2017_2_27

    工作总结web_acl 535 git clone “ssh://git@outergit.yonyou.com:49622/esn_web/web_acl.git" 600 git bra ...

  9. groovy 环境配置

    win7: 下载 http://www.groovy-lang.org/download.html 将解压后的文件夹里的bin目录加入path环境变量

  10. mysql 数值与字符类型 长度梳理

    上述表格中的数值类型都是定长的,也就是说,无论你存的数值是多少,多大或者多小,占用的存储字节大小都是固定的.例如,设置int(1),虽然M值是1个字符,但是它所占用的空间大小永远都是4个字节的大小,换 ...