gcc 基本操作

一. Gcc 编译处理过程

下面以 helloworld 程序为例去进行解释过程:

其中hello.c的内容如下:
#include<stdio.h>

int main()
{
        printf("hello world\n");
}

第一步:预处理  -E

预处理阶段过程如下,预处理阶段是进行处理代码中的宏和 include 指令,并作语法检查。

这一过程的命令为:# gcc -E hello.c -o hello.i 执行这一部生成了一个hello.i 文件,如下:

可以看到由于进行了预处理,将 include 内部的文件进行了替换,预处理后的结果文件显得特别大,


所以在以后的程序中,没有用到的头文件最好不要引入,这样会降低处理时间和空间。

第二步:汇编程序生成汇编码  -S

这一步是将预处理文件进行汇编, 生成汇编程序,命令如下:

可以看出生成的汇编程序为19行。

第三步:由汇编程序转换为中间目标文件 -c

这一步是将汇编的代码进一步进行处理,每一个源程序都会生成相应的目标文件,是以 .o 为扩展名的文件。

命令如下:



第四步:连接目标文件,生成可执行程序 -o

这一阶段被称为链接阶段,这一阶段完成的是将目标文件进行连接生成相应的最终目标文件(可执行文件或静态库或动态库)


二. 常用步骤:

1. 直接生成可执行文件


三. GCC编译器的选项

1. 基本选项

-E 只进行预处理选项,不进行编译、汇编、以及连接

-S 编译后停止,不进行会变和连接

-c 编译或会汇编文件,但不进行连接

-o file 指定输出文件名

2. 警告选项

-Wall 启用所有警告信息

-Werror 在发生警告时取消编译操作,即将警报看作是错误

-w 禁用所有警告信息

3. 优化选项

-O0:不进行优化处理

-O或-O1:进行基本的优化,这些优化在大所属情况下都会使程序执行的更快

-O2:除了完成-O1级别的优化外,还需要一些其他的调整工作,如处理器指令调度等,只是GNU发布软件的默认优化

-O3:除了完成-O2级别的优化外,还进行循环的展开(这往往会提高执行速度)以及其他的一些预处理器相关的优化工作。

-Os:生成最小的可执行文件,主要用在嵌入式领域。

4. 连接器选项

-I directory 向GCC的头文件搜索路径中添加新的目录, 如: -I /user/QT/include

-L directory 向GCC的库文件搜索路径中添加一个行的目录,如:-L /lib/xxx.a

-llibrary 提示连接程序在创建可执行文件时包含指定的库文件,如:-libm.a

-static 强制使用静态库

-shared 强制使用共享库

5. 其他选项

-xlanguage 指定输入文件的编程语言

-v 显示编译器的版本号

-g 获得有关调试程序的详细信息

-ansi 支持符合ansi彼岸准的c 程序


 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值