(十四)gcc命令参数

本专栏总结王利涛《C语言嵌入式Linux高级编程》第三期课程

一、gcc是个啥东西?

  • gcc不仅仅是个“编译器”;
  • gcc是GNU编译器套件,英文全称:GNU Compiler Collection;
  • gcc包含预处理器、编译器、汇编器、链接器;
  • gcc也包含各种文件处理工具:objump、objcopy、nm、readelf、strip;
  • 自带各种库、头文件。

二、gcc编译工具链

1)通过参数调用不同的工具

  • -E:预处理,会调用cpp预处理器;
  • -S:生成汇编文件,gcc合并预编译和编译,调用ccl程序完成;
  • -C:生成目标文件,调用汇编器as。

2)查看gcc工作流程

  • gcc --verbose

3)各种参数的作用

  • 控制编译器过程;
  • 编译选项控制;
  • 编译器优化选项。

编译过程控制

参数 说明
-E 预处理,但不生成文件:gcc -E main.c -o main.i
-C 预处理,不删除注释信息
-S 只激活预处理和编译,生成汇编代码
-c 将源文件编译成目标文件,但不链接
-o 输出目标名称,gcc默认编译出来的文件是a.out
-M 生成文件关联依赖关系
-MD 和-M相同,但是将输出导入到 .d 文件里面
-MM 生成文件关联依赖关系,但忽略#include<file.h>产生的依赖关系

编译选项设置

参数 说明
-g 编译时产生调式信息
-static 禁止使用动态库
-share 尽量使用动态库
-Ldir 指定库搜索路径,默认编译器只在标准库的目录寻找
-llibname 指定编译时使用的库。
-share 生成共享目标文件
-w 不生成任何警告信息
-Wall 生成所有警告信息
-std:c99 指定c标准,gcc默认的标准是GNU C

编译优化选项

参数 说明
-O0 编译器关闭所有优化选项,编译时不会优化代码
-O1 缺省值
-O2 推荐的优化等级:提高代码性能的同时,不会增加文件体积
-O3 最高级别优化,不建议使用
-Os 优化代码尺寸,适合存储资源紧张的系统,不推荐使用
  • 注意:编译时,不要使用最高优化选项,可能会发生莫名其妙的错误、UB行为。不要盲目相信编译器,编译器也有bug。
  • 其它更多的参数,可查阅gcc中文手册。

猜你喜欢

转载自blog.csdn.net/weixin_38956024/article/details/107588642
今日推荐