news 2026/9/3 18:22:09

【建议收藏】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/9/4 10:45:33

冥想第一千七百三十六天(1736)

1.周三,周四来补日记,今天晚上跑步40分钟,项目上特别的忙,最近这一阵子项目都忙的连口水都没时间喝。 2.感谢父母,感谢朋友,感谢家人,感谢不断进步的自己。

作者头像 李华
网站建设 2026/9/3 1:18:39

即用宝典:超全面的登录功能测试点

验证登录流程判断逻辑 1 前端 账户名、密码、验证码是否为空; 密码是否符合规则(特殊字符、大小写、数字、长度……)。 2 服务端 验证码是否正确 (对应时间戳是否过期); 账户是否存在 (未注册、已注销&#xff0…

作者头像 李华
网站建设 2026/9/3 21:22:27

在算法的潮汐中:我的赞叹与疑惑

整整一天的演讲、演示和讨论,像一阵海啸般冲刷着我的认知边界。在这个智能化的浪潮面前,我发现自己正站在一个前所未有的十字路口,心中充满了矛盾的赞叹与深刻的困惑。当AI只花几分钟就能代替我花几个小时做出来的视频,当它写出我…

作者头像 李华
网站建设 2026/9/3 1:18:46

heic打不开怎么办?别慌!5个简单方法,1分钟解决

“为什么从iPhone传到电脑里的照片都打不开了?” 很多Windows用户在整理苹果手机照片时,都会遇到这个令人头疼的问题。当你看到一堆以 .heic 结尾的文件,却无法用系统自带的看图软件打开时,不必惊慌。这其实是苹果为了节省存储空间…

作者头像 李华
网站建设 2026/9/4 7:41:18

[技术讨论] 【每周分享】CW32L011直流无刷电机驱动无霍尔测试

有幸拿到了武汉芯源的CW32L011直流无刷电机驱动开发板。 产品参数: 主控MCU:CW32L011K8T6 LQFP32(7*7) PCBA:7.4 * 11.6 cm 黑色沉金工艺 驱动能力:12~72V 800W MAX; 需要与电容\场效应管参数配合;大功率使用建议安装散…

作者头像 李华