GCC是一个用于linux系统下编程的编译器。对于linux嵌入式系统开发来说是一种最普遍的工具。
gcc除了编译程序的功能外,还含其他相关工具。它能把易于使用的高级语言编写的源代码构建成能在
计算机直接执行的二进制代码。在linux下最常用的是用于编译程序。
GCC支持的体系机构有40余种,常见的有x86系列、ARM、Power PC等,同时还能运行在不同的操
作系统上,如Linux、Solaris、Windows等。 GCC除了支持C语言外,还支持多种其他语言,如C++、
Ada、Java、Objective-C、FORTRAN、Pascal等。
1.gcc使用语法:
GCC 【option】【filename】···
其中option为gcc使用时的选项(参数),filename为用gcc处理的文件名
2.gcc所遵循的部分约定规则:
.c为后缀的文件,C语言源代码文件;
.a为后缀的文件,是由目标文件构成的档案库文件;
.C,.cc或.cxx 为后缀的文件,是C++源代码文件;
.h为后缀的文件,是程序所包含的头文件;
.i 为后缀的文件,是已经预处理过的C源代码文件;
.ii为后缀的文件,是已经预处理过的C++源代码文件;
.m为后缀的文件,是Objective-C源代码文件;
.o为后缀的文件,是编译后的目标文件;
.s为后缀的文件,是汇编语言源代码文件;
.S为后缀的文件,是经过预编译的汇编语言源代码文件。
3.gcc编译器的执行过程
使用gcc由C语言源代码文件生成可执行文件的过程:预处理(也称预编译,Preprocessing)、编译(Compilation)、汇编(Assembly)和链接(Linking)。
(1)预处理:完成源代码中的宏和include展开工作 gcc -E test.c -o test.i
(2)编译:把预处理后的结果编译成汇编代码 gcc -S test.i -o test.s
(3)汇编:把编译的结果汇编成目标代码模块 gcc -c test.s -o test.o
(4)链接:把多个目标代码模块链接成生成一个大的目标模块,得到可执行文件 gcc test.o -o test
以上过程中的test.c为C源代码,test为可执行文件。
4.gcc常用的模式
GCC常用的两种模式是:编译模式和编译链接模式。
(1)gcc -o test test.c 此过程为由C源代码(test.c)直接编译生成可执行文件(test)
(2)gcc -c test.c 此时默认生成名为test.o的目标文件
或自己指定输出文件名称即:gcc -c test.c -o mytest.o 此时生成的目标文件名为mytest.o
此过程中由源代码(test.c)编译生成的目标文件test.o或mytest.o虽然也是机器代码但是不可执行。
(3)多个源文件生成一个目标文件时的gcc模式
gcc -o test first.c second.c third.c
5.gcc编译器的常用选项
-x langage 标示源文件所用的语言
-x none 把上面的 -x langage都关掉
-c 把源文件编译成目标代码,不做连接
-S 把源文件编译成汇编代码,不做汇编和连接
-E 输出预处理结果,不进行编译、汇编、连接
-o file 指名输出名为file
-v 把整个编译过程的输出信息都打印出来
-C 同-E参数配合用,让预处理结果把注释保留,方便读取
-g 把调试开关打开,让编译的目标文件有调试信息
-I dir 宏include需要搜寻的目录dir
-L dir 搜寻库文件(*.a)的路径dir
-Wall 发出gcc可以提供的所有有用的警告信息