1、GCC概述
C头文件: 用C语言进行程序设计时,咱们要用到头文件来提供对常量的定义和对系统及库函数调用的声明。 头文件几乎老是在 /usr/include 目录及其子目录下。web
C函数库: 库是一组预先编译好的函数的集合,这些函数都是按照可重用的原则编写的。 标准系统库文件通常存储在 /lib 和 /usr/lib 目录中。vim
一个C/C++程序从开始编码到生成二进制可执行文件至少要通过4个步骤svg
预处理(Preprocessing):对源文件的宏进行展开
编译(Compilation;):将源程序编译成汇编文件
汇编(Assembly):将汇编文件编译成机器码
连接(Linking ):将目标文件和外部符号进行连接,生成可执行文件
2、GCC命令
做用: 使用 gcc 编译器对指定文件进行处理函数
格式: gcc [选项] [文件名]编码
经常使用选项:spa
-o file:将通过gcc处理过的结果存为文件file,这个结果文件多是预处理文件、汇编文件、目标文件或者最终的可执行文件命令行
-c:仅对源文件进行编译,不连接生成可执行文件。设计
-Idir:大写I)在编译源程序时增长一个搜索头文件的额外目录——dir,即include增长一个搜索的额外目录。code
-Ldir:(大写L)在编译源文件时增长一个搜索库文件的额外目录——dirxml
-E:指定GCC在生成预处理文件后中止
-S:指定GCC在生成汇编文件后中止
3、源文件的编写
一、在命令行输入
$ vim hello.c
二、进入hello.c后,按照如下内容编写(编辑)
#include
int main(int argc,char **argv)
{
printf("hello world\n");
}
4、由源文件生成预处理文件
一、在命令行输入
$gcc –E hello.c –o hello.i
二、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");
}
5、由源文件生成汇编文件
一、在命令行输入
$gcc –S hello.c –o hello.s
二、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
6、由源文件生成对应的目标文件和可执行文件
一、生成目标文件
$ gcc -c hello.c -o hello.o
二、生成可执行文件
$ gcc hello.o -o hello
三、执行可执行文件
$ ./hello