本文参考:
1. 什么是GCC?
The GNU Compiler Collection (GCC) is a compiler system produced by the GNU Project supporting various programming languages.
—— wiki
GCC是一套支持多语言的编辑器。它原本只能处理C语言。GCC很快地扩展,变得可处理C++。之后也变得可处理Fortran、Pascal、Objective-C、Java、Ada,以及Go与其他语言。
2. 使用
最简单的使用为:
gcc hello.c
结果输出a.out
可执行文件。
-o output_filename
这是最常用的编译选项,用于指定要生成的可执行文件的名称,各参数之间的相对位置无关,但是-o之后空格紧跟所指定的文件名。
gcc -o hello hello.c
等效于
gcc hello.c -o hello
编译出的可执行文件,在Windows下就是exe(executive)。但Linux下,后缀名无限制。一般不指定后缀就可以了。
-g
用于给生成的可执行文件加上调试信息,只有这样才可使用gdb调试。
gcc -g -o hello hello.c
-c
只编译,不链接成为可执行文件。编译器只是由输入的 .c 等源代码文件生成对应的 .o 为后缀的目标文件,通常用于编译不包含主程序的子程序文件。
gcc -c hello.c
效果生成hello.o
-Idirname
将 dirname 所指出的目录加入到程序头文件目录列表中,是在预编译过程中使用的参数。
说明:
C程序中的头文件包含两种情况:
#include <stdio.h>
#include "stdio.h"
其中,使用尖括号(<>),预处理程序 cpp 在系统默认包含文件目录(如/usr/include)中搜索相应的文件;使用双引号,预处理程序 cpp 首先在当前目录中搜寻头文件,如果没有找到,就到指定的 dirname 目录中去寻找。在程序设计中,如果需要的头文件分别分布在不同的目录中,就需要逐个使用 -I 选项给出搜索路径。
-l/home/jelly/myheader
-Ldirname
将dirname所指出的目录加入到程序函数库文件的目录列表中,是在链接过程中使用的参数。在默认状态下,链接程序 ld 在系统默认路径中(如 /usr/lib)寻找所需要的库文件。这个选项告诉链接程序,首先到 -L 指定的目录中去寻找,然后到系统默认路径中寻找;如果函数库存放在多个目录下,就需要依次使用这个选项,给出相应的存放目录。
-L/home/jelly/mylib
-lname
链接时装载名为 libname.a 的函数库。该函数库位于系统默认的目录或者由** -L 选项确定的目录下**。
-lm
表示链接名为 libm.a 的数学函数库
-Wall
用于产生警告信息。