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 制定编译时的库搜索路径