gcc编译器
一、准备
1.安装gcc
sudo apt-get install gcc
2.版本查询
gcc -v
3.使用
1> gcc *.c // 默认a.out
2> gcc *.c -o 指定名 // 指定生成对应名
4.配置文件
/lib/x86_64-linux-gnu/ld-2.23.so*
二、分区
.text 程序上下文(程序指令区)
编译后函数的指令集(main,自定义函数,只读不写)
.rodata 常量数据区
存放程序中的字符或字符串,数字常量(只读不写)
.data 已初始化数据区
所有静态变量和已初始的全局变量
.bss 未初始化数据区
未初始化的全局数据
三、编译流程
(一)预处理
格式:
gcc -E *.c(源文件) -o *.i(预处理文件)
流程完成的任务:
1.检查预处理指令是否正确
2.处理预处理指令
宏替换(#define)
条件编译(#if #ifdef)
导入头文件(#include)
(二)编译
格式:
gcc -S *.i(预处理文件) -o *.s(汇编语言文件)
流程完成的任务:
1.检查[C语言语法
2.把c语言代码编译成汇编语言代码
3.进行简单分区(.rodata .text)
(三)汇编
格式:
gcc -c *.s(汇编文件) -o *.o(目标文件)
流程完成的任务:
1.将汇编指令编译成二进制机器指令
2.名称统一处理
3.继续分区(.data .bss确定了指令之间的偏移量)
反汇编指令:
gcc objdump -D *.o > *.s
(四)链接
格式:
gcc *.o(目标文件) -o *(可执行文件)
流程完成的任务:
1.加载系统库文件(静态库),编译器对应用程序初始化
2.详细分区(确定逻辑地址)
四、常用的一些参数
1.-Wall
显示所有警告内容
2.-O
编译时进行优化
-O0,-O1,-O2,-O3 n级优化
3.-g
加入gdb调试
4.-l
加载库/lib
-lm加载数学库
/lib/x86_64-linux-gnu/libm.so.6
-lpthread 加载线程库
/lib/x86_64-linux-gnu/libpthread.so.0
-lcrypt加载md5加密库
/lib/x86_64-linux-gnu/libcrypt.so.
5.-L
指定库文件所在路径
6. -I
指定头文件路径
7.多文件联编:
gcc fun.c hello.c -o hello