赵老师笔记----GCC使用方法和常用选项
一、GCC使用方法
使用GCC编译C程序生成可执行文件需要经历4个步骤: 1、预处理,这一步需要分析各种命令,如#define、#include、#ifdef等。Gcc调用cpp程序来进行预处理 2、编译,这一步将根据输入文件产生汇编语言,gcc调用ccl进行编译工作
3、汇编,这一步中将汇编语言作为输入,产生具有.o扩展名的目标文件,gcc调用as进行汇编工作 4、链接,这一步中各目标文件.o被放在可执行文件的适当位置上,该程序引用的函数也放在可执行文件中,gcc调用ld来完成
例1:分步进行
gcc -E hello.c -o hello.i 1、预处理
gcc -S hello.i -o hello.s 2、编译
gcc -c hello.s -o hello.o 3、汇编
gcc hello.o -o hello_elf 4、链接
例2: 一步到位
gcc hello.c -o hello_elf
gcc hello.c //不指定生成的可执行文件默认为a.out
执行
./hello_elf
./a.out
二、GCC常用选项
Gcc命令的基本用法为:gcc [option] [filename],命令行选项指定的操作将在命令行上每个给出的文件上执行。
例如: Gcc –o prog main.c test1.c test2.c
其中,“-o prog” 指定输出的可执行文件名为prog, 如果没有指定-o参数, gcc将使用默认的可执行文件名a.out
Gcc的命令选项有许多项,但经常使用的几个选项是:
1、-c:只预处理,编译和汇编源程序,不进行连接
2、-o exefile, 确定输出文件为exefile,如果没有该选项,默认输出为可执行文件a.out
3、-Dmacro或-Dmacro=defn,其作用类似于源程序代码中的#define 4、-O,对程序编译进行优化,编译后可执行文件的长度和执行时间缩短,但编译过程耗时变长,对主机性能要求较高。
5、-O2,比-O更好地优化
6、-g,告诉gcc产生能被GNU调试器使用的调试信息以便调试程序 7、-Idir,将dir目录加到搜寻头文件的目录列表中。并优先于在gcc中默认的搜寻目录
更多的选项说明请查阅gcc使用手册。
举例:
hello.c
#include <stdio.h>
//我是注释,请注意我
int main(int argc, char *argv[])
{
printf("hello,world!\n");
return 0;
}
例1:分步进行
gcc -E hello.c -o hello.i 1、预处理
gcc -S hello.i -o hello.s 2、编译
gcc -c hello.s -o hello.o 3、汇编
gcc hello.o -o hello_elf 4、链接
例2: 一步到位
gcc hello.c -o hello_elf
gcc hello.c //不指定生成的可执行文件默认为a.out
执行
./hello_elf
./a.out
显示hello.c的总行数
cat hello.c | wc -l
显示hello.i的总行数
cat hello.i | wc -l
加入调试信息
gcc -g hello.c -o hello_elf
打开所有警告
gcc -Wall hello.c -o hello_elf