GCC(GNU Compiler Collection,GNU编译器集合)是一套由GNU工程开发的支持多种编程语言的编译器。GCC是自由软件发展过程中的著名例子,由自由软件基金会以GPL协议发布。GCC是大多数类Unix操作系统(如Linux、BSD、Mac OS X等)的标准的编译器,GCC同样适用于微的Windows。GCC支持多种计算机体系芯片,如x86、ARM,并已移植到其他多种硬件平台。GCC原名为GNU C编译器(GNU C Compiler),因为它原本只能处理C语言。GCC很快地扩展,并支持处理C++。后来又扩展能够支持更多编程语言,如Fortran、Pascal、Objective-C、Java、Ada、Go等。
test.c test.h——预处理——>test.i——编译——>test.s——汇编 ——>test.o ——链接——>test
原文件 | | 汇编文件 | 机器语言 | 二进制可执行
(1)预处理
处理源文件中的#ifdef、 #include和#define命令
gcc -E test.c -o test.i
(2)编译
编译后生成汇编语言文件*.s
GCC -S test.i -o test.s
(3)汇编
将输入的汇编文件*.s转换成机器语言*.o
GCC -c test.s -o test.o
(4)链接
在连接阶段将输入的机器代码文件*.s(与其它的机器代码文件和库文件)汇集成一个可执行的二进制代码文件。
GCC test.o -o test
注:一般来说前三个步骤合并为一个步骤:
GCC -c test.c -o test.o
或者
四个步骤合并为一个步骤:
GCC -o test test.c
(1)-l 指定程序要链接的库名。
如:数学库,库文件名是libm.so,库名是m,把库文件名的头lib和尾.so去掉就是库名了。
命令:libxxx.so -lxxx
-l 可以直接链接的库必须放在: /lib, /usr/lib, /usr/local/lib 中
(2)-L 指定链接目录
如果要链接的库不在上述的目录下,必须使用-L指定库的目录。如X11的库,它放在/usr/X11R6/lib目录下。
命令: -L/usr/X11R6/lib -lX11
/usr/lib 不用指定
例如,假设存放源文件的子目录名为./src,而包含文件则放在层次的其他目录下,如./inc。当我们在./src 目录下进行编译工作时:
gcc test.c –I../inc -o test
指定多个include文件:
gcc test.c –I../inc –I../../inc2 -o test