LINUX学习笔记——gcc使用入门

一.程序从代码到运行

在使用IDE编程时,写完代码直接点击运行就输出结果了,中间过程由编译器自动完成,而使用gcc时有必要对其中过程有一些简单了解。
一般来说,程序需要经过预处理、编译、汇编、链接四个步骤,下面就分别对这这个环节进行简单介绍。

//一步完成编译链接过程,-o为指定生成的文件名,默认名为a.out
gcc  -E  hello.c -o hello

1. 预处理

gcc -E hello.c -o hello.i//将hello.c预处理输出hello.i

预处理过程做的工作主要有以下几点(处理#开头的指令):

  1. 宏替换
  2. 展开文件
  3. 条件编译
  4. 去掉注释

2. 编译

gcc -S hello.i//将hello.i编译输出hello.s

编译时主要做的工作: 通过语法分析和词法分析,在确认所有指令都符合规则时,将其翻译成汇编代码

3.汇编

gcc -c hello.s//将hello.s汇编输出hello.o

将编译产生的汇编文件转换成机器代码,这个过程比较死,重要性相对较低,调试时有时能用到反汇编

4.链接

gcc hello.o -o hello//将编译生成的.o文件链接,生成可执行文件

地址和空间的分配,符号决议和重定位.
符号决议:地址绑定,分为静态链接和动态链接
重定位:

补充

对于多文件编译链接,可以多文件一起编译,也可以分别编译,最后链接到一起,其语法分别如下:

gcc test1.c test2.c -o test
gcc -c test1
gcc -c test2
gcc -o test1 test2 -o test

对于文件比较多,有时候可能对单一文件进行修改,如果用第一种方式将会把所有文件重新编译再链接,而用第二种只需对更改后的文件单独编译再与其余编译好的文件链接。

你可能感兴趣的:(LINUX)