GCC编译简介

  1. gcc编译4步骤
    在这里插入图片描述
    a. 预处理
    生成预编译文件:
    gcc -E hello.c -o heelo.i
    b. 编译
    生成汇编代码
    gcc -S hello.i -o hello.s
    c. 汇编
    生成目标文件
    gcc -c hello.s -o hello.o
    d. 链接
    生成可执行文件
    gcc hello.o -o hello
  2. 其它常用选项介绍
    -I:指定头文件所在目录位置
    hello.c包含的头文件hello.h放在了和hello.c同一级目录下的inc文件夹内,hello.c的代码如下,那么在编译时需要通过-I指定头文件hello.h的路径。
#include "hello.h"

int main(int argc, char *argv[])
{
	int  a=10;
	printf("Hello Linux\n");
	
	#ifdef HELLO
	printf("This is a debugging message\n");
	#endif
	
	while(0)
	{
		printf("This is an error message\n");
	}
	
	return 0;
}

指令如下:
gcc -I./inc hello.c -o hello
-g:编译时添加调试文件。主要支持gdb调试
增加-g选项编译的文件可以使用gdb工具进行调试。指令如下:

gcc -I./inc hello.c -o hello.dbg -g

-On: n=0~3 编译优化,n越大优化得越多
当使用O时可以优化掉上述代码中while(0)部分。在某些特殊情况下不能使用-O选项,特别是在嵌入式使用的过程中,比如

int i = 0;
i = 1;
i = 0;
i = 1;
i =0;
i = 1;
i = 0;

在上述代码中使用-O3选项是会优化掉i中间的变化部分,直接就是i=0;如果在嵌入式系统中i表示一个IO,外接了一个指示灯,不优化的状态是“灭-亮-灭-亮-灭-亮-灭”,优化后直接就是灭了。
-Wall: 显示所有编译警告信息
当使用这个选项编译上述代码时,会出现如下警告信息:

#gcc -I./inc hello.c -o hello -Wall
hello.c:在函数'main'中:
hello.c:5:警告:未使用的变量‘a’

-D:向程序中动态注册宏定义。
例如定义HELLO编译上述程序,然后执行会有如下结果:

#gcc -I./inc hello.c -o hello  -D HELLO
#./hello
Hello Linux
This is a debugging message

不定义HELLO则不会输出“This is a debugging message”。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值