一、GCC概述
C头文件: 用C语言进行程序设计时,我们要用到头文件来提供对常量的定义和对系统及库函数调用的声明。 头文件几乎总是在 /usr/include 目录及其子目录下。
C函数库: 库是一组预先编译好的函数的集合,这些函数都是按照可重用的原则编写的。 标准系统库文件一般存储在 /lib 和 /usr/lib 目录中。
一个C/C++程序从开始编码到生成二进制可执行文件至少要经过4个步骤
预处理(Preprocessing):对源文件的宏进行展开
编译(Compilation;):将源程序编译成汇编文件
汇编(Assembly):将汇编文件编译成机器码
链接(Linking ):将目标文件和外部符号进行链接,生成可执行文件
二、GCC命令
作用: 使用 gcc 编译器对指定文件进行处理
格式: gcc [选项] [文件名]
常用选项:
-o file:将经过gcc处理过的结果存为文件file,这个结果文件可能是预处理文件、汇编文件、目标文件或者最终的可执行文件
-c:仅对源文件进行编译,不链接生成可执行文件。
-Idir:大写I)在编译源程序时增加一个搜索头文件的额外目录——dir,即include增加一个搜索的额外目录。
-Ldir:(大写L)在编译源文件时增加一个搜索库文件的额外目录——dir
-E:指定GCC在生成预处理文件后停止
-S:指定GCC在生成汇编文件后停止
三、源文件的编写
1、在命令行输入
$ vim hello.c
2、进入hello.c后,按照以下内容编写(编辑)
#include
int main(int argc,char **argv)
{
printf("hello world\n");
}
四、由源文件生成预处理文件
1、在命令行输入
$gcc –E hello.c –o hello.i
2、hello.i 的内容
执行预处理主要完成以下3个任务
(1)把“include"的文件拷贝到要编译的源文件中
(2)用实际值替代”define“的文本
(3)在调用宏的地方进行宏替换
extern void funlockfile(FILE *__stream) __attribute__((__nothrow__));
# 844 "/usr/include/stdio.h" 3 4
# 2 "hello.c" 2
int main()
{
printf("hello world!\n");
}
五、由源文件生成汇编文件
1、在命令行输入
$gcc –S hello.c –o hello.s
2、hello.s 的内容
main:
leal 4(%esp), %ecx
andl $-16, %esp
pushl -4(%ecx)
pushl %ebp
movl %esp, %ebp
pushl %ecx
subl $4, %esp
movl $.LC0,(%esp)
call puts
addl $4, %esp
popl %ecx
popl %ebp
leal -4(%ecx), %esp
ret
六、由源文件生成对应的目标文件和可执行文件
1、生成目标文件
$ gcc -c hello.c -o hello.o
2、生成可执行文件
$ gcc hello.o -o hello
3、执行可执行文件
$ ./hello