工具篇_GCC

简介

  • GCC支持多种计算机体系结构芯片,如x86、ARM、MIPS等,并已被移植到其他多种硬件平台 。

  • GCC原名为GNU C语言编译器(GNU C Compiler),只能处理C语言。但其很快扩展,变得可处理C++,后来又扩展为能够支持更多编程语言,如Fortran、Pascal、Objective -C、Java、Ada、Go以及各类处理器架构上的汇编语言等,所以改名GNU编译器套件(GNU Compiler Collection) 。

GCC遵循的部分约定规则

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

GCC编译过程

虽然我们称GCC是C语言的编译器,但使用gcc由C语言源代码文件生成可执行文件的过程不仅仅是编译的过程,而是要经历四个相互关联的步骤∶预处理(也称预编译,Preprocessing)、编译(Compilation)、汇编(Assembly)和链接(Linking)。

在这里插入图片描述分步生成命令:(熟记)

  • 预处理(pre-processing)E:插入头文件,替换宏
  • 编译(Compiling)S:编译成汇编
  • 汇编(Assembling) c:编译成目标文件
  • 链接 (Linking):链接到库中,变成可执行文件

gcc -E hello.c -o hello.i // -o参数代表output file

gcc -S hello.i –o hello.s

gcc –c hello.s –o hello.o

gcc hello.s –o hello 链接,生成可执行文件

也可以一次性完成:
gcc hello.c –o hello
但一般情况下生成.o文件比较好,可以重定位文件,让别人使用

命令参数用法

在使用GCC编译器的时候,我们必须给出一系列必要的调用参数文件名称。GCC编译器的调用参数大约有100多个,这里只介绍其中最基本、最常用的参数。


GCC最基本的用法是∶gcc [options] [filenames]
其中options就是编译器所需要的参数,filenames给出相关的文件名称。


参数功能
-c只编译,不链接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。常用
-ooutput_filename,确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out。常用
-E只运行C预编译器(头文件,宏等展开)大写
-S生成汇编语言文件后停止编译(.s文件)大写
-g产生符号调试工具(GNU的gdb)所必要的符号资讯,要想对源代码进行调试,我们就必须加入这个选项。常用
-O对程序进行优化编译、链接,采用这个选项,整个源代码会在编译、链接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是,编译、链接的速度就相应地要慢一些。大写O
-O2比-O更好的优化编译、链接,当然整个编译、链接过程会更慢。大写O
-vgcc执行时执行的详细过程,gcc及其相关程序的版本号常用
-Wall打开编译告警(所有)常用
-shared生成共享库格式动态链接库
-fPIC产生位置无关码,允许在任何地址加载 (否则只能从指定地址加载,无法控制)相对地址动态链接库

其他参数>
-Idirname,将dirname所指出的目录加入到程序头文件目录列表中,是在预编译过程中使用的参数。C程序中的头文件包含两种情况∶
A)#include <myinc.h>
B)#include “myinc.h”
其中,A类使用尖括号(< >),B类使用双引号(“ ”)。对于A类,预处理程序cpp在系统预设包含文件目录(如/usr/include)中搜寻相应的文件,而B类,预处理程序在目标文件的文件夹内搜索相应文件。


调试和剖析选项(-g | -pg):
GCC支持数种调试剖析选项。在这些选项中最常用的是-g和-pg。
-g选项告诉gcc产生能被GNU调试器(如gdb)使用的调试信息,以便调试用户的程序。
-pg选项告诉gcc在用户的程序中加入额外的代码,执行时,产生gprof用的剖析信息以显示程序的耗时情况。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值