GCC(GNU Compiler Collection)是linux下最主要的一种编译工具。
GCC编译格式:
gcc [选项] 源文件名 [选项] 目标文件名
采用默认得方式编译源文件,系统会生成a.out可执行文件
采用显式编译成目标文件,在编译成可执行文件
gcc -c hello.c #生成hello.o
gcc hello.o #生成a.out
gcc -o hello hello.o #生成hello
直接编译成可执行文件
gcc -o hello hello.c
编译完后可执行的程序均为绿色字体,执行格式:
./程序的名称
例如:
./a.out或./hello
GCC编译流程
编译器的输入是程序的源文件,输出是可执行得文件或者可分发得二进制代码,中间过程便是编译器要完成得工作。其程序得编译流程为:
(1)预处理(预编译)
本阶段是针对头文件(.h)进行编译,即将这些头文件编译到当前源文件中,预处理常用得选项是-E,它的作用是告诉编译器,当预处理结束后停止编译。
预处理的输入是.c文件,输出是.i文件
命令:gcc -E 源文件 -o 目标文件
gcc -E hello.c -o hello.i
(2)编译
本阶段是对代码得规范性,语法得正确性进行检查,并编译成汇编语言。编译常用的选项是-S,它的作用是告诉编译器,当编译结束时,停止编译。
编译的输入是.i文件,输出是.s文件
命令:gcc -S 源文件 -o 目标文件
gcc -S hello.i -o hello.s
gcc -S hello.c -o hello.s
(3)汇编
本阶段是将汇编语言翻译成目标文件,汇编常用的选项是-c,它的作用是告诉编译器,当汇编阶段结束时停止编译
汇编的输入是.s文件,输出是.o文件
命令:gcc -c 源文件 -o 目标文件
gcc -c hello.s -o hello.o
(4)链接
本阶段是将所有的目标文件以及相应的库文件编译成可执行文件,链接并不需要选项,只需要制定生成的可执行文件名。
链接的输入是.o文件,输出是可执行文件
命令:gcc 源文件 -o 目标文件
gcc hello.o -o hello
常用的编译选项:
-o 后边跟目标对象的名称
-c 只编译不链接,后边跟源文件
-g 开启gdb调试,gdb是一个调试工具
-Wall 提示所有的警告信息
-Werror 将所有的警告当作错误处理
-static 静态链接库
-llibrary 链接名为library得库文件
-I dir 用于添加头文件查找目录(Include)
-L dir 用于添加库文件查找目录(Library)
-g 添加调试信息,生成的目标文件的大小会增大