首页 > 代码库 > linux C编程之gcc的使用

linux C编程之gcc的使用

前言:我们知道GCC是C语言的编译器,使用GCC由C语言源文件生成可执行文件的过程,要经过四个相互关联 的步骤:(这里以hello.c为源文件名)

预处理:preprocessing   将一些宏展开,其中包括头文件的展开                                    执行的命令:   gcc -E hello.c -o hello.i      (预处理后的文件后缀是i)

汇编:assembly          将预处理文件生成汇编代码                                                       执行的命令:   gcc -S hello.i -o  hello.s     (汇编处理后的文件后缀是s)

编译:complicationg   将汇编代码生成二进制文件                                                       执行的命令:   gcc -c hello.s  -o hello.o     (编译处理后的文件后缀是 o)

链接:linking               将生成的二进制文件和库链接 生成可执行二进制文件              执行的命令:   gcc     hello.o -c hello          (可执行文件名指定为helli)

 

上面四个步骤可以用一个命令代替:   gcc hello.c  -o hello

 

gcc命令的格式:   gcc [选项]     要编译的文件   【选项】  【目标文件】

常用选项

选项                                               说明

-c                                                     只激活预处理、编译和汇编

-S                                                    只激活预处理和编译,把文件编译成汇编代码

-E                                                    只激活预处理

-o                                                    指定目标文件

-g                                                    编译的时候,产生调试信息

-static                                             将产生一个和static库连接生成的可执行文件,在没有使用该选项的情况下,默认是使用共享库,

-Wall                                               打印所有警告信息

-w                                                   关闭所有警告信息

-werror                                           把所有警告信息转化为错误信息,即发生警告时终止编译过程

-include file                                    包含该文件的代码  相当于#include<file>  ,gcc hello.c -include /root/hell.h    

-immacros file                                将制定文件的宏包含进来

-Dmacro                                        相当于#define macro

-Dmacro=defn                               相当于#define macro=defn

-Umacro                                        相当于#undef  macro

-C                                                  在预处理的时候不删除注释信息

-llibiray                                          编译的时候使用libray库

-O0~O3                                         编译优化的四个等级  -O0代表不优化

-Ldir                                              制定编译时的库搜索路径