GCC的使用

本文详细介绍了GCC编译器的工作流程,包括预处理、编译、汇编和链接四个阶段,并解释了如何通过不同的编译选项来控制这些阶段。此外,还介绍了如何使用-I和-L选项指定头文件和库文件的路径,以及如何使用-l选项链接特定的库文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[1]gcc 编译路程
1. 预处理阶段
gcc -E -o  [目标文件] [编译文件]

*.c--->*.i
-E可以使编译器在预处理结束时就停止编译

2. 编译阶段
gcc -S -o [目标文件] [编译文件]

*.i---->*.s
-S能使编译器在进行完编译后就停止

3. 汇编阶段
gcc -c -o [目标文件] [编译文件]

*.s---->*.o
-c可使汇编代码转化为二进制目标代码后停止

4.链接阶段
gcc [编译文件] -o [目标文件]

建议添加:-Wall打开所有类型语法警告

[2]gcc使用库函数
1.-I<dir>
预编译中包含进来的“stdio.h”只有对函数的声明,而没有定义函数的实现。
include语句中,“<>”表示在标准路径中搜索头文件,linux中默认为“/usr/include”
将头文件用“”括起,默认为在当前文件夹中查找头文件
如果头文件不在当前文件夹,-I<头文件所包含的路径>告诉编译器在指定路径搜索头文件。

2.-L<dir>
功能与-I<dir>类似,区别在于“-L”指明库文件的路径

3.使用不同类型链接库
-l(注意这里是小写的“L”)该选项用于指明具体使用的库文件

如静态库文件“libm.a”,在调用时只需写“-lm”;同样对于共享库文件“libm.so”,在调用时也只需要写做“-lm”即可。
若系统中同时存在库名相同的静态库文件和共享库文件时,链接选项会调用哪个?

系统缺省链接的是共享库,这是由于linux系统默认的是采用动态链接的方式。
如果用户要链接同名的静态库,则在“-l”之前添加“-static”。

[3]gcc代码优化
“-On”建议不要使用或写“-O0”。
虽然优化选项可以加快代码的运行速度,但对于调试而言将是一个挑战。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值