gcc学习

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

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值