1.什么是gcc
\qquadgcc是linux中的一款编译源代码的文本编译器
2.编译过程
\qquad比如对hello.c文件进行编译,
\qquad首先,预处理器cpp对hello.c进行处理,cpp会把头文件展开,宏替换,注释去掉,经过cpp处理后,hello.c文件变为hello.i文件;
\qquad第二步,编译器gcc对hello.i进行处理,gcc会把C文件变为汇编文件,进过gcc处理后,hello.i文件变为hello.s文件;
\qquad第三步,汇编器as对hello.s进行处理,as会把汇编文件变为二进制文件,经过as处理后,hello.s文件变为hello.o文件;
\qquad最后,链接器ld对hello.o进行处理,ld会把函数库相应的代码组合到目标文件中,经过ld处理后,hello.o文件变为可执行文件。
\qquad在整个过程中,第二步最消耗时间。
3.基于linux的编译处理
\qquadlinux中使用gcc命令对filename.c文件进行处理。
\qquad从filename.c到filename.i
gcc -E filename.c -o filename.i
\qquad从filename.i到filename.s
gcc -S filename.i -o filename.s
\qquad从filename.s到filename.o
gcc -c filename.s -o filename.o
\qquad从filename.o到可执行文件
gcc filename.o -o app #app为可执行文件名,也可以取其它名字
\qquad从filename.c直接到可执行文件
gcc filename.c -o app
\qquad执行app
./app
4.gcc的参数
\qquad在进行编译时,源文件和头文件应该放在一个目录下,否则需要制定头文件的路径。
gcc filename.c -o app -I [filename.c的头文件路径]
注意:filename.c位置应该包含所有.c文件,否则会编译失败,并且如果.c文件不再同一个文件夹下,应该采取路径方式,将所有.c文件都包含进来gcc ./sum/sum.c main -o myapp -I ./sum -I链接了头文件的位置,如果有多个头文件在不同位置,那么就需要每个头文件都需要一个-I。
\qquad在进行编译时,定义一个宏
gcc filename.c -o app -D 宏名
\qquad在进行编译时,对程序进行优化,优化等级分为O1,O2,O3
gcc filename.c -o app -O1
\qquad在进行编译时,输出警告信息
gcc filename.c -o app -Wall
5.gcc实例演示
- 目录结构
zhaoxr@zhaoxr-ThinkPad-E450:~/linux$ tree
.
├── head
│ ├── add.h
│ └── mul.h
└── source├── add.c├── main.c└── mul.c2 directories, 5 files
- gcc编译生成可执行文件
zhaoxr@zhaoxr-ThinkPad-E450:~/linux/source$ gcc add.c main.c mul.c -o app -I ../head
zhaoxr@zhaoxr-ThinkPad-E450:~/linux$ tree
.
├── head
│ ├── add.h
│ └── mul.h
└── source├── add.c├── app├── main.c└── mul.c2 directories, 6 files
- 执行
zhaoxr@zhaoxr-ThinkPad-E450:~/linux$ ./source/app
a+b=19,a*b=90