一、gcc简介
gcc与g++,当程序中出现using namespace std等带有c++特性的语句时,如果用gcc编译时,必须显式地指明这个程序要用c++编译库编译,而g++可以直接编译。
二、gcc支持的文件
.c,c语言的源程序
.C, c++的源程序
.cc,c++的源程序
.cxx, c++的源程序
.m, Objective c的源程序
.i, 经过预处理的c源程序
.ii, 经过预处理的c++源程序
.s, 汇编语言的源程序
.S, 汇编语言的源程序
.h, 头文件
.o, 目标文件
.a, 存档文件
三、gcc是高效的编译器
#include<stdio.h>intmain(){
printf("Hello World!\n");
return0;
}
g++ 编译该段代码后,大小为:4.6K
tc++3 编译该段代码后,大小为:7.8K
bc45编译该段代码后,大小为:53.8k
vc6编译该段代码后,大小为:184k
四、编译过程
1、用gcc编译程序时,分为四个阶段:
(1)预处理(pre-processing)
(2)编译(compiling)
(3)汇编(assembling)
(4)链接(lingking)
2、分步编译源程序
(1)预处理
gcc -E hello.c -o hello.i
(2)编译
gcc -S hello.c -o hello.s
(3)汇编
gcc -c hello.c -o hello.o
(4)链接
gcc hello.c -o hello
五、gcc的常用选项
(1)-c
通知gcc取消链接步骤,即编译源码并在最后生成目标文件
(2) -Dmacro
定义指定的宏,使它能够通过源码中的#ifdef进行检验
(3)-LDIRNAME
将DIRNAME加入到库文件搜索的路径中
(4)-g
在可执行文件中包含标准调试信息
(5)-IDIRNAME
将DIRNAME加入到头文件搜索的路径中
(6)-llibrary
提示链接程序在创建最终可执行文件时包含指定的库
(7)-o,-o2,-o3
将优化状态打开,该选项不能与-选项联合使用
(8)-S
要求编译程序生成来自源代码的汇编程序输出
(9)-wall
启动所有饿警报
(10)-E
仅执行预处理
(11)-Werror
在发送警报时取消编译操作,即将警报看做是错误
(12)-w
禁止所有的警报
(13)-static
对库文件进行静态链接
(14)-ggdb
在可执行文件中包含只有gdb才能识别的大量调试信息
(15)-ansi
支持ansi/iso语法标准,取消gnu所有与ansi冲突的语法扩展
(16)--pedantic
尽可能显示ansi/iso c标准列出的所有警告
(17)--pedantic-errors
尽可能显示ansi/iso c标准列出的所有错误