news 2026/5/8 21:58:11

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【建议收藏】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

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 8:42:27

区块链相关知识

一、区块链的简介 区块链可视为一种特殊的分布式数据库。 首先,区块链的主要作用是存储信息,任何需要保存的信息,都可以写入区块链,也可以从中读取信息,所以视它为数据库。 其次,任何人都可以架设服务器,加入区块链网络,成为一个节点。区块链的世界中没有中心节点,…

作者头像 李华
网站建设 2026/5/2 3:53:43

【完整源码+数据集+部署教程】食品分类2检测系统源码分享[一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示]

一、背景意义 随着全球人口的不断增长和生活水平的提高,食品安全与营养健康问题日益受到关注。食品种类繁多,消费者在选择食品时不仅关注其营养成分,还对食品的来源、品质和安全性提出了更高的要求。在此背景下,食品分类与检测技术…

作者头像 李华
网站建设 2026/5/3 18:09:20

【英飞凌 CY8CKIT-062S2-AI评测】-开发环境搭建与开发

过21IC网,申请到了英飞凌 CY8CKIT-062S2-AI开发板,该开发板是英飞凌的PSOC6系列的人工智能评估套件,它有一套创新工具用来原型制作和收集真实数据,以快速构建机器学习模型。硬件尺寸很小巧35mm*45mm,基于它可以建构边缘…

作者头像 李华
网站建设 2026/5/1 17:01:44

基于SpringBoot2+Vue2的企业合作与活动管理平台

企业合作与活动管理平台 演示视频 https://www.bilibili.com/video/BV1E4qpB9E8b/ 角色 管理员、普通用户、企业用户 技术 后端:Spring Boot 2、MySQL 前端:Vue.js 核心功能 本系统是一个企业合作与活动管理平台,旨在连接企业和普通用…

作者头像 李华
网站建设 2026/5/8 21:42:24

稀土抑烟剂在PVC材料中的防火与抑烟作用

PVC(聚氯乙烯)因耐用、易加工、成本低,被广泛应用于建筑管材、电线护套、地板和卷材等领域。但在火灾条件下,PVC燃烧容易产生大量烟雾和刺激性气体,不仅影响逃生,也增加了火灾危害。一、什么是稀土抑烟剂&a…

作者头像 李华