GCC(GNU C Compiler)是GNU项目中符合 符合ANSI C 标准的编译系统,能够编译调用 C 、C++、object C等语言编写的程序,同时gcc 也是一个交叉编译器,特别适用于不同平台的嵌入式开发。
一、GCC程序编译过程:
源文件.c >(预处理)> 预编译文件.i >(编译)> 汇编文件.s >(汇编)> 目标文件.o >(链接)> 可执行文件
vim abc.c //用vim创建一个abc.c文件
/* 在vim下编写程序*/
i //进入插入模式
#include<stdio.h>
int main ()
{
printf("hello world \r");
return 0;
}
:wq // 保存 abc.c文件并退出
gcc -o build abc.c //gcc abc.c -o build
./build //执行build文件
gcc支持的后缀名 |
后缀名 | 对应的语言 |
---|---|
.c | C原始程序 |
.C/.cc/.cxx | c++ 原始程序 |
.m | Objective C原始程序(苹果) |
.i | 已经预处理的C原始程序 |
.ii | 已经预处理的C++原始程序 |
.s/.S | 回避那语言的原始程序 |
.h | 预处理头文件 |
.o | 目标文件 |
.a/.so | 编译后的库文件,静态库和动态库 |
二、GCC 手册
在实际使用gcc中如果遇到未知的错误,可以产看手册
man gcc
就能进入 GCC的介绍页面,哪里不会看哪里。
介绍一下搜索:
/ XXXX //搜索关键字
n //下一个
N //上一个
/* 如果查询其他的功能,可以按“h”进入帮助文档*/
三、了解编译过程
1、编写程序
vim 1.c //首先利用vim 编写一个hello world的程序
#include <stdio.h>
int main ()
{
printf("hello world");
return 0;
}
:wq //保存退出
2、进行预编译(预处理)
gcc -E 1.c -o 1.i //进行预编译
然后产看一下 1.i的内容
3、编译
gcc -S 1.i -o 1.s //对1.i文件进行编译生成1.s的汇编文件
查看一下1.s文件,内容均为汇编语言
再次查看一下文件的大小
4、生成目标文件
gcc -c 1.c 1.s -o 1.o
查看一下1.o的内容
然后再看一下文件的大小
file 1.o //查看一下1.o的文件属性
5、链接
gcc 1.o -o build
最后完成链接,运行程序屏幕就出现了 “hello world”
6、调试
gcc -g 1.c -o 2
./2
四、添加头文件
1、指定路径头文件
在abc.c 的中添加一个头文件abc.h,因此需要添加abc.h的路径,这样才能使编译器找到abc.h。需要调用 “-I”
gcc -I. abc.c -o build
//"."表示当前路径
//-I表示指定路径
在当前文件中建立一个inc的文件夹,存放abc.h
gcc -I./inc abc.c -o build