2026/4/18 0:33:08
网站建设
项目流程
天津网站建设论坛,深圳做网站找谁,怎样搭建个人网站,建设部评职称网站作者#xff1a;嵌入式兔哥 简介#xff1a;在嵌入式开发中#xff0c;GCC 是我们最忠实的伙伴。很多兄弟可能只习惯用 IDE 的一键编译#xff0c;但一旦转战 Linux 环境或编写 Makefile#xff0c;理解 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- 选项-ljpeg2.-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 app3.-g和-O2能共存吗可以-g主要是添加符号表-O2是改变代码结构以优化性能。虽然可以共存但在-O2优化后GDB 调试时可能会发现代码跳跃执行因为指令被重排了建议开发阶段用-O0 -g发布阶段用-O2。如果觉得这篇速查表对你有帮助欢迎点赞收藏我是嵌入式兔哥我们下期见