当前位置: 首页 > news >正文

【建议收藏】GCC 编译器常用选项速查表(附助记词)

作者:嵌入式兔哥

简介:在嵌入式开发中,GCC 是我们最忠实的伙伴。很多兄弟可能只习惯用 IDE 的一键编译,但一旦转战 Linux 环境或编写 Makefile,理解 GCC 的这些参数就成了基本功。今天兔哥帮大家整理了一份“不求人”的 GCC 常用选项速查表,配合助记词,助你过目不忘!

类别选项助记(全称)作用示例及解释
库与头文件用法-IInclude指定头文件的搜索路径。



告诉编译器去哪里找.h文件。
gcc main.c -I ./inc



(解释:编译时额外在./inc目录寻找头文件)
-llibrary指定要链接的库名



库名需去掉前缀lib和后缀.so
gcc main.c -lpthread



(解释:链接libpthread.so线程库)
-LLib path指定库文件的搜索路径。



告诉编译器去哪里找.so.a文件。
gcc main.c -L ./lib



(解释:链接时额外在./lib目录寻找库文件)
编译流程-EPrE-process只进行预处理,既不编译,也不汇编



主要处理#include#define等。
gcc -E main.c -o main.i



(解释:生成.i预处理文件,用于检查宏展开)
-SASsembly只编译,不汇编



将 C 代码转换为汇编代码。
gcc -S main.c -o main.s



(解释:生成.s汇编文件,用于查看底层指令)
-ccompile编译并汇编,但不进行链接



将汇编代码转换为机器码。
gcc -c main.c -o main.o



(解释:生成.o目标文件,用于多文件编译)
-ooutput小写字母“o”,指定生成的可执行文件的名字



不指定的话生成的可执行文件名为a.out
gcc main.c -o app



(解释:生成名为app的可执行文件)
调试与优化-gDebug生成调试信息



方便 GDB 或 VSCode 进行断点调试。
gcc -g main.c -o app



(解释:生成包含调试符号的程序,体积稍大)
-O0~-O3Optimize指定优化等级



-O0不优化(调试用);-O2标准优化(发布用)。
gcc -O2 main.c -o app



(解释:使用 Level 2 级别优化代码性能)
-WallWarningAll开启所有警告



强烈建议使用,能发现潜在 Bug。
gcc -Wall main.c -o app



(解释:打印出所有可能的代码警告信息)
嵌入式软件常用-DDefine定义宏



等同于在代码里写#define,常用于条件编译。
gcc main.c -DDEBUG



(解释:在命令行定义 DEBUG 宏,激活调试代码)
-staticstatic静态链接



把所有依赖库打入可执行文件,体积大但移植性好。
gcc main.c -static -o app



(解释:生成不依赖系统动态库的独立程序)
-nostdlibno std lib不连接标准库



不使用 glibc,用于编写 Bootloader 或裸机程序。
gcc -nostdlib start.o ...



(解释:仅链接指定文件,不引入标准 C 库)

🐰 兔哥划重点

1.-I,-L,-l傻傻分不清楚?

这是新手最容易报错的地方。记住这个口诀:

  • 头文件 (Include)找不到? 用-I(大写 i) 指路。

  • 库文件 (Lib)在哪? 用-L(大写 L) 指路。

  • 叫什么 (library)名字? 用-l(小写 L) 点名。

注意-l后面跟的是库的缩写

  • 文件名:libmath.so-> 选项:-lmath

  • 文件名:libjpeg.a-> 选项:-ljpeg

2.-c-o的黄金搭档

在编写Makefile时,我们通常不会直接gcc main.c -o app一步到位,而是分两步走,这样修改一个文件时,只需要重新编译那个文件即可,速度更快:

# 1. 先生成 .o (使用 -c) gcc -c main.c -o main.o gcc -c func.c -o func.o # 2. 最后链接 (不加 -c) gcc main.o func.o -o app

3.-g-O2能共存吗?

可以!-g主要是添加符号表,-O2是改变代码结构以优化性能。虽然可以共存,但在-O2优化后,GDB 调试时可能会发现代码跳跃执行(因为指令被重排了),建议开发阶段用-O0 -g,发布阶段用-O2

如果觉得这篇速查表对你有帮助,欢迎点赞收藏,我是嵌入式兔哥,我们下期见!

http://www.cnnetsun.cn/news/138366.html

相关文章:

  • java计算机毕业设计蔬菜配送系统 生鲜直配平台的设计与实现 社区蔬菜一站式采购与配送管理系统
  • dubbo源码之一次RPC请求的生死之旅(基于Dubbo 2.7.8)
  • 基于SpringBoot+Vue的web城乡居民基本医疗信息管理系统管理系统设计与实现【Java+MySQL+MyBatis完整源码】
  • 【完整源码+数据集+部署教程】手势与标志识别检测系统源码[一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示]
  • 03.统计学机器学习
  • [Poi2011]Lightning Conductor题解
  • 一文读懂大模型:收藏级教程,助你从入门到精通
  • Nginx云计算大数据——安装AND版本升级(普通升级+平滑升级+失败回滚)
  • GPT-5.2 实测数据流出:逻辑推理性能翻倍,大模型“幻觉”真的被终结了吗?
  • SQL SERVER——通过计划任务方式每月对配置数据、审计数据等进行备份
  • 前端——跨平台桌面应用开发实践
  • OpenAI 的反击!GPT-5.2 强行拉开代差,Gemini 3 和 Claude 4 还有机会吗?
  • 零售打工人加薪难?靠这张证,我在激烈竞争里站稳了脚跟
  • 基于springboot的多媒体素材库的开发与应用毕业论文+PPT(附源代码+演示视频)
  • 从离线语音到多模态智能体四博智联 AI 硬件整体解决方案全景解析
  • 我发现跨医院联合训练让诊断准确率飙升后来才知道是横向联邦学习在数据孤岛中的绝招
  • 性能压测工具:wrk
  • 论文引用标注工具排名2025:6大平台+自动规范推荐
  • Kotaemon AWS EC2部署实例:国际业务首选
  • 实在没货,简历(软件测试)咋写?
  • 网约车服务端线上流量巡检与测试验收技术
  • 公考日记7
  • 火电一次调频、自抗扰调频及群智能算法智能调频在MATLAB/Simulink中的应用
  • 科研实验室温湿度监控新范式:以太网 POE 技术全场景解决方案
  • RV1126 NO.57:ROCKX+RV1126人脸识别推流项目之读取人脸图片并把特征值保存到sqlite3数据库
  • 探索SAR ADC:45nm工艺下的高速高精度设计
  • 【小增长技术团队东哥分享】Electron vs Electron-Vite vs Electron-Egg:桌面端开发到底该选谁?
  • 测试价值的量化评估:从成本中心到价值证明的路径探索
  • 测试领导力:在敏捷洪流中筑造质量堤坝
  • C++常用设计模式