GCC编译器入门

  GCC编译器(GNU C Compiler)是GNU组织的一款开源 编译器,它是Linux环境下的默认C语言编译器。它处理能够高效的编译C语言以外,还可以编译其他语言。并且,现在的GCC已经不光包括编译器本身,还包含了编译过程中的工具链。

1 GCC编译流程

在学习使用GCC编译程序之前,首先要知道编译C程序的基本流程,一般情况下分为下面四步:

(1) 对C语言进行预处理,生成*.i文件。

(2) 将上一步生成的*.i文件编译生成汇编语言文件,后缀名为*.s

(3) 将汇编语言文件*.s经过汇编,生成目标文件,后缀名为*.o

(4) 将各个模块的*.o文件链接起来,生成最终的可执行文件

2 GCC常用选项

GCC的编译选项非常多,现在有上千个,但是我们常用的并不多,下面我们只介绍其中非常实用的几个。

在这之前,我们先编写下面的几个源文件,以备测试只用。

 1 //main.c
 2 #include <stdio.h>
 3
 4 extern int add(int a, int b);
 5 extern int mul(int a, int b);
 6
 7 int main(void)
 8 {
 9     int a = 10, b = 5;
10     int result;
11
12     result = add(a, mul(a,  b));
13     printf("result = %d\n", result);
14     return 0;
15 }

main.c

1 //test1.c
2 int add(int a, int b)
3 {
4     return a+b;
5 }

test1.c

1 //test2.c
2 int mul(int a, int b)
3 {
4     return a*b;
5 }

test2.c

2.1 -c选项

  该选项(小写c)表示编译、汇编指定的源文件,但是不进行链接。该选项的使用方法如下:

gcc -c source.c

也就是在-c选项后面紧跟要编译、汇编的C源文件,最终生成与源文件名称相同,但是后缀为*.o结尾的目标文件。

[email protected]:~/Documents/c_code$ ls
main.c  test1.c  test2.c
[email protected]-machine:~/Documents/c_code$ gcc -c test1.c
[email protected]-machine:~/Documents/c_code$ ls
main.c  test1.c  test1.o  test2.c

可以看到,使用-c选项编译之后生成了对应的*.o目标文件。当然,你也可以一次性指定多个C源文件,使用-c选项后,会针对每一个C源文件生成一个相应的*.o目标文件。

[email protected]:~/Documents/c_code$ gcc -c test2.c main.c
[email protected]-machine:~/Documents/c_code$ ls
main.c  main.o  test1.c  test1.o  test2.c  test2.o

2.2 -S选项

  该选项(大写S)将C语言源文件编译生成汇编语言文件,但是并不汇编该程序。注意:汇编过程的作用是将汇编语言文件编译成目标文件*.o,而-S选项的作用是得到汇编语言文件*.s。该选项的使用方法为:

gcc -S source.c

使用该选项,最终生成与源文件名称相同,但是后缀为*.s结尾的汇编语言文件。

[email protected]:~/Documents/c_code$ gcc -S test1.c
[email protected]-machine:~/Documents/c_code$ ls
main.c  test1.c  test1.s  test2.c

当然,输入的源文件也不止一个,你可以编译当前目录下的所有C语言源文件:

[email protected]:~/Documents/c_code$ gcc -S *.c
[email protected]-machine:~/Documents/c_code$ ls
main.c  main.s  test1.c  test1.s  test2.c  test2.s

我们也可以查看生成的汇编语言代码:

 1     .file    "test1.c"
 2     .text
 3     .globl    add
 4     .type    add, @function
 5 add:
 6 .LFB0:
 7     .cfi_startproc
 8     pushl    %ebp
 9     .cfi_def_cfa_offset 8
10     .cfi_offset 5, -8
11     movl    %esp, %ebp
12     .cfi_def_cfa_register 5
13     movl    12(%ebp), %eax
14     movl    8(%ebp), %edx
15     addl    %edx, %eax
16     popl    %ebp
17     .cfi_restore 5
18     .cfi_def_cfa 4, 4
19     ret
20     .cfi_endproc
21 .LFE0:
22     .size    add, .-add
23     .ident    "GCC: (Ubuntu 4.8.2-19ubuntu1) 4.8.2"
24     .section    .note.GNU-stack,"",@progbits

test1.s

时间: 2024-11-05 22:53:40

GCC编译器入门的相关文章

嵌入式入门-gcc编译器

嵌入式入门-gcc编译器 一 GCC特点 GNU推出的功能强大,性能优越的多平台编译器.gcc可以在多种硬体平台上编译 出可执行程序,其执行效率与一般的编译器 相比平均效率要高20%~30%. 二 使用方法 gcc [-参数] file_name gcc hello.c -o hello.out -o生成指定的文件名 三 编译过程 1 预处理 gcc -E hello.c -o hello.i 2 汇编   gcc -S hello.i -o hello.s 3 链接   gcc -O hell

vi 编辑器,gcc 编译器的使用

vi编辑器是我们在linux下经常使用的文本编辑器,这个东西也是专门为程序员准备的,基本上每个Unix和Linux系统都为我们提供了这个软件,我们可以使用vi来编写我们的代码.在vi编辑器下所有操作都必须通过键盘和特定的快捷键组合来完成,刚开始学习的新手会感觉不太容易,但是这个东西很重要,我们先来学习如何使用它,掌握了这个东西去面试的时候也算是一门技能.而vim是vi的增强版,新增加了很多功能. 在shell下输入命令vi 文件名,例如:vi first.c,就开始编辑first.c文件了.vi

GCC编译器编译链接

在gcc编译器环境下,常见的文件扩展名的含义如下: .c:C源程序,经过预编译后的源程序也为.c文件,它可以通过-E参数输出. .h:头文件 .s:经过编译得到的汇编程序代码,它可以通过-S参数输出. .o:目标文件 .a:函数库 Gcc编译器常见语法: -c:只进行编译,不进行链接,输出的是与源文件同名的.o文件. -o:指定生成的文件的名称.链接生成可执行文件,这个参数后可以带可执行文件的名字,如果没有指定可执行文件的名字,则会默认为a.out. -S:输出汇编代码文件,输出一个与源文件同名

C语言的编译过程、安装gcc编译器以及设置环境变量

以我对C语言编译过程的了解,我用了一点时间画了一个图,提供给大家参考一下,希望有些能对您的问题提上帮助. 前几天刚初步学习了C语言的编译过程,感触挺深的.在C语言中头文件其实起了一个很大的作用. 1.头文件可以不需要编译 2.可以查看具体的声明 3.头文件加上实现文件的o文件提交给使用者即可 ,不需要知道源代码 4..o文件预先编译,所以整个项目编译时,会大大提高编译的时间 . 5.当一个文件(A.c文件)依赖于头文件(b.h)时 ,如果b.c编译之后形成的b.o文件重新编译后,a.o的文件不需

基于Linux下的GCC编译器的内部预宏定义与__attribute__属性

***************************************************************************************************************************** 作者:EasyWave                                                                                    时间:2015.02.20 类别:Linux应用-GCC编

windows下安装,配置gcc编译器

在Windows下使用gcc编译器: 1.首先介绍下MinGW MinGW是指仅仅用自由软件来生成纯粹的Win32可运行文件的编译环境,它是Minimalist GNU on Windows的略称. 实际上 MinGW 并非一个 单纯的C/C++ 编译器,而是一套 GNU 工具集合.除开 GCC 以外,MinGW 还包括有一些其它的 GNU 程序开发工具 (比方 gawk bison 等等). 开发 MinGW 是为了那些不喜欢工作在 Linux(FreeBSD) 操作系统而留在 Windows

GCC编译器

GCC是GNU项目的编译器,是GNU最具代表性的作品.GCC设计之初是专门用于C程序的编译器,展开叫做GNU C Compiler.经过数十年的发展,如今的GCC现在已经支持编译多种语言,像C.C++.Objective-C.JAVA.Fortran等等,是GNU  Compiler Collection.当我们用gcc命令编译的时候,它会根据文件的后缀名自动的选择相应的编译器.GCC种包含以下常见命令: C编译器:cc.gcc C++编译器:c++.g++ 源代码预处理器:cpp 注意:1.c

如何使用gcc编译器

要想读懂本文,你需要对C语言有基本的了解,本文将介绍如何使用gcc编译器. 首先,我们介绍如何在命令行的方式下使用编译器编译简单的C源代码. 然后,我们简要介绍一下编译器究竟作了哪些工作,以及如何控制编译的过程. 我们也简要介绍了调试器的使用方法. gcc介绍 你能想象使用封闭源代码的私有编译器编译自由软件吗?你怎么知道编译器在你的可执行文件中加入了什么?可能会加入各种后门和木马.Ken Thompson是一个著名的黑客,他编写了一个编译器,当编译器编译自己时,就在'login'程序中留下后门和

利用GCC编译器生成动态链接库和静态链接库

转载请标明:http://www.cnblogs.com/winifred-tang94/ 1.编译过程 gcc –fPIC –c xxx.c 其中-fPIC是通知gcc编译器产生位置独立的目标代码.链接的时候不通过拷贝来进行. 2.链接过程 gcc –shared –o libxxx.so xxx.o 经过编译链接就可以生成动态链接库,其扩展名为.so Eg. 还可以gcc –fPIC –shared -o libhello.so hello.c 举个例子: //Hello.h //hello