1、由代码生成可执行文件包含四个步骤:预处理,编译,汇编,连接
2、全局选项:
-x language
指定编程语言
-c
编译或汇编源文件,但不做连接操作,编译器输出对应于源文件的目标文件,即“.o”文件。
-S
编译后停止,不进行汇编,对每个输入的非汇编文件,输出汇编语言文件,即“.s“文件。
-E
预处理后停止,不进行编译,预处理后的代码送往标准输出。
-o
指定输出文件名。
-pipe
在编译过程的不同阶段间使用管道,而不是用临时文件进行通信。
3、语言选项:
-ansi
支持符合ansi标准的C程序,关闭GNU C中某些不兼容的特性,如asm, inline, typeof
4、预处理器选项
下列选项针对C预处理器,预处理器用在正式编译以前,对C 源文件进行某种处理.
如果指定了`-E'选项, GCC只进行预处理工作.下面的某些选项必须和`-E'选项一起
才 有意义,因为他们的输出结果不能用于编译
-include file
在处理常规输入文件之前,首先处理文件file,其结果是,文件file的内容先得到编译
命令行上任何`-D'和`-U'选项永远在`-include file'之前处理, 无论他们在命令
行上的顺序如何.然而`-include'和`-imacros'选项按书写顺序处理.
-imacros file
在处理常规输入文件之前,首先处理文件file,但是忽略输出结果.由于丢弃了文件f
ile的 输出内容, `-imacros file'选项的唯一效果就是使文件file中的宏定义生效
, 可以用于其他输入文件.
5、汇编器选项
-Wa,option
把选项option传递给汇编器.如果option含有逗号,就在逗号处分割成多个选项.
6、连接器选项
-llibrary
连接名为library的库文件.
连接器在标准搜索目录中寻找这个库文件,库文件的真正名字是`liblibrary.a'.连
接器会 当做文件名得到准确说明一样引用这个文件.
搜索目录除了一些系统标准目录外,还包括用户以`-L'选项指定的路径.
-static
在支持动态连接(dynamic linking)的系统上,阻止连接共享库.该选项在其他系统上无效.
-shared
生成一个共享目标文件,他可以和其他目标文件连接产生可执行文件.只有部分系统支持该选项.
-symbolic
建立共享目标文件的时候,把引用绑定到全局符号上.对所有无法解析的引用作出警告(除非用连接编辑选项 `-Xlinker -z -Xlinker defs'取代).只有部分系统支持该选项.
7、目录选项
-Idir
在头文件的搜索路径列表中添加dir 目录.
-I-
任何在`-I-'前面用`-I'选项指定的搜索路径只适用于`#include "file"'这种情况;他们不能用来搜索`#include <file>'包含的头文件.
-Ldir
在`-l'选项的搜索路径列表中添加dir目录.
8、警告选项
警告是针对程序结构的诊断信息,程序不一定有错误,而是存在风险,或者可能存在错误.
-fsyntax-only
检查程序中的语法错误,但是不产生输出信息.
-w
禁止所有警告信息.
-Wno-import
禁止所有关于#import的警告信息.
9、调试选项
-g
以操作系统的本地格式(stabs, COFF, XCOFF,或DWARF).产生调试信息. GDB能够使用这些调试信息.
-O
-O1
优化.对于大函数,优化编译占用稍微多的时间和相当大的内存.
10、目标机选项
-b machine
参数machine指出编译的目标机种.这个选项用于安装为交叉编译器的GNU CC.
参数machine的值和配置GNU CC交叉编译器时设置的机器类型一样.例如,如果交叉编译器配置有 `configure i386v',意思是编译80386上的System V目标码,那么你可以通过`-b i386v'运行交叉编译器.
如果没有指定`-b'选项,通常指编译本机目标码
如,
1、生成动态库文件:
gcc -shared -fPCI -o libmyhello.so hello.o
2、使用动态库:
gcc -o hello main.c -L. -lmyhello
3、生成静态库文件:
ar crv libmyhello.a hello.o
4、使用静态库文件:
gcc main.c libmyhello.a -o main