gcc编译工具链
1.什么是编译器?
机器只能够识别0和1的机器语言,不能识别高级语言编写的程序。
高级语言编写的程序——》机器语言——》编译器(承担翻译官的角色,编译器也是一个程序)。
2.有了编译器有什么好处?
让人可以编写更适合人类思维的高级语言,而不用编写机器语言程序,也不用考虑怎样将高级语言转化为机器语言。
gcc编译器,也是一个交叉编译器就是编译和运行的平台不一样。
从高级语言——》机器语言要经过以下几个步骤:
1.预处理:gcc -E 文件名 -o 文件名.i (.i)文件
处理什么?
①头文件:#include<stdio.h>
②宏定义:#define MAX 10
③条件编译:# if... # else... # endif
④注释:
预处理的目的:处理一些不是核心的东西,让编译器处理最核心的东西。
2.编译阶段
将文件编译成汇编文件(.s)文件
①gcc -S demo.i
②gcc -S demo.i -o demo.s
③gcc -S demo.c
④gcc -S demo.c -o demo.s
3.汇编
将文件生成机器码(.o)文件
gcc -c demo.c
gcc -c demo.i (前提有.i文件)
gcc -c demo.s (前提有.s文件)
4.链接阶段
平常使用 gcc -c demo.c 默认生成 a.out 文件
gcc -c demo.c -o demo 与 a.out 内容一样
静态封装
实现的需求:能够调用自己写的加法函数
1.编辑要封装到库里的函数实现; add.c
①需要两个加数;
②对两个加数进行相加;
③返回或者输出加数和;
-w 关闭警告 -wall 打开警告
2.把add.c封装成库,
①生成目标文件gcc -c demo.c
②将目标文件封装成库;
ar rcs libadd.a add.o
libadd.a :lib是前缀,表明这是一个库;add是库的名字,.a表明是一个静态库;
③执行文件:./a.out 当前文件下执行。