函数编译的四个阶段:
1> 预处理。去掉注释、包含文件、宏展开、条件编译…
2> 编译。
3> 汇编。这前三个阶段称为翻译阶段。
4> 链接
gcc常用命令参数
-E 停在预处理阶段
-S 停在编译阶段
-C 停在汇编阶段
-O 编译优化
-o 确定输出文件的名称
-g 产生gdb调试的符号资讯
-c 只编译,不产生可执行文件
-Wall 允许输出所有告警信息
wc命令 查看代码大小
ELF文件格式
ELF头 |
... |
未处理数据 |
ndate全局符号 |
data只读数据 |
text代码正文 |
$vim helloword.c
helloworld.c内容如下:
#include <stdio.h>
int main (int argc, char **argv )
{
printf(“hello,world!\n”);
return 0;
}
编译并运行成可执行文件
$gcc –o hello helloworld.c
$./hello
分步编译并查看生成文件的类型
$gcc –E helloworld.c –o hello.i #生成预编译文件hello.i
$file hello.i #查看hello.i的文件类型
$gcc –S helloworld.c –o hello.s #生成汇编文件hello.s
$file hello.s #查看hello.s的文件类型
$gcc –c helloworld.c –o hello.o #生成目标代码hello.o
$file hello.o #查看hello.o的文件类型
GDB调试工具的使用
gcc编译时使用-g选项生成编译文件,才能使用gdb调试。
gdb常用命令:
l 看源文件。l 2-10 #看源文件的2——10行
b 6 在第6行设置断点
info b 查看断点
r 运行代码
p n 查看变量n的值。同display n
n 单步运行
s 单步运行
c 恢复程序运行
help 帮助
b t 查看栈帧
q 退出