命令速查toolchain
gcc:编译与链接 C 程序
使用 GCC 驱动预处理、编译、汇编和链接 C 程序,并确认编译器目标与输出文件。
gcc 是 GCC 的编译器驱动。一次常规调用依次执行预处理、编译、汇编和链接;交叉编译器通常使用带目标前缀的名称,例如 aarch64-linux-gnu-gcc。
gcc [选项] 输入文件 ...| 选项 | 作用 |
|---|---|
--version |
显示编译器版本。 |
-dumpmachine |
显示编译器配置的目标系统标识。 |
-E |
只预处理。 |
-S |
编译到汇编代码后停止。 |
-c |
生成目标文件,不执行链接。 |
-o 文件 |
指定输出文件。 |
-Wall -Wextra -Wpedantic |
启用一组常用诊断。 |
-std=c17 |
选择 C17 语言标准。 |
编译并链接单个 C 源文件:
gcc -std=c17 -Wall -Wextra -Wpedantic -O2 -o hello hello.c只生成目标文件,并检查编译器目标:
gcc -c -o hello.o hello.cgcc -dumpmachine成功时通常没有终端输出,可通过退出状态和输出文件共同确认结果。
风险与注意事项
Section titled “风险与注意事项”-o指向已有文件时会覆盖它;应在专用构建目录中操作。- 没有诊断不代表程序逻辑正确;警告也不等同于完整的静态分析。
- 编译器目标名称、ELF 架构和目标系统 ABI 都匹配后,产物才可能在目标机运行。
- 不要使用管理员权限编译普通项目,也不要执行来源不明的构建脚本。
原生 gcc 默认面向其配置目标;交叉编译器名称和可用多库由工具链提供者决定。BusyBox 不包含 GCC。某些系统上的 gcc 命令也可能由兼容驱动提供,应以 gcc --version 和 gcc -dumpmachine 的实际输出为准。
- 命令:make
- 概念:交叉编译工具链
- 实战:为 Raspberry Pi 交叉编译最小程序