一、Linux程序gcc编译步骤:
Gcc编译过程主要的4个阶段:
l 预处理阶段,完成宏定义和include文件展开等工作;(.i)
l 根据编译参数进行不同程度的优化,编译成汇编代码(.s.S)
l 用汇编器把汇编代码进一步生成目标代码(.o)
l 用连接器把生成的目标代码和系统或用户提供的库连接起来,生成可执行文件
格式:
l gcc -E test.c//预处理阶段
l Gcc -S test.c//编译阶段
l Gcc -c test.c//汇编阶段
l Gcc -o test test.c//链接阶段
-c
只激活预处理,编译,和汇编,也就是他只把程序做成obj文件
例子用法:
将生成 .o 的 obj 文件
gcc -c hello.c
-S
只激活预处理和编译,就是指把文件编译成为汇编代码
例子用法:
将生成 .s 的汇编代码,你可以用文本编辑器察看
gcc -S hello.c
-E
只激活预处理,这个不生成文件, 你需要把它重定向到一个输出文件里面
例子用法:
gcc -E hello.c > pianoapan.txt
gcc -E hello.c | more
-o
制定目标名称, 默认的时候, gcc 编译出来的文件是 a.out, 很难听, 如果你和我有同感,改掉它, 哈哈
例子用法:
gcc -o hello.exe hello.c (哦,windows用习惯了)
gcc -o hello.asm -S hello.c
-Ldir
制定编译的时候,搜索库的路径。比如你自己的库,可以用它制定目录,不然编译器将只在标准库的目录找。这个dir就是目录的名称
-O0 、-O1 、-O2 、-O3
编译器的优化选项的 4 个级别,-O0 表示没有优化, -O1 为默认值,-O3 优化级别最高
-g
只是编译器,在编译的时候,产生调试信息
-Ldir
制定编译的时候,搜索库的路径。比如你自己的库,可以用它制定目录,不然编译器将只在标准库的目录找。这个dir就是目录的名称。
-O0 、-O1 、-O2 、-O3
编译器的优化选项的 4 个级别,-O0 表示没有优化, -O1 为默认值,-O3 优化级别最高
-ggdb
此选项将尽可能的生成 gdb 的可以使用的调试信息