GCC 使用指南
- 安装 GCC
Ubuntu/Debian:
sudo apt update && sudo apt install gcc g++
CentOS/RHEL:
sudo yum install gcc gcc-c++
macOS (通过 Homebrew):
brew install gcc
- 基本用法
编译 C 程序
gcc hello.c -o hello # 编译 hello.c,生成可执行文件 hello
./hello # 运行程序
编译 C++ 程序
g++ hello.cpp -o hello
./hello
- 常用编译选项
选项 作用
-o <文件名> 指定输出文件名
-O0 / -O1 / -O2 / -O3 优化级别(默认 -O0,不优化)
-Wall 启用所有警告(强烈建议开启)
-Werror 将警告视为错误
-g 生成调试信息(用于 GDB 调试)
-I<目录> 指定头文件搜索目录
-L<目录> 指定库文件搜索目录
-l<库名> 链接动态库(如 -lm 链接数学库)
-std=<标准> 指定语言标准(如 -std=c11 或 -std=c++17)
- 多文件编译
直接编译多个文件
gcc main.c utils.c -o program # 编译并链接所有文件
分步编译(推荐)
gcc -c main.c -o main.o # 生成 main.o
gcc -c utils.c -o utils.o # 生成 utils.o
gcc main.o utils.o -o program # 链接生成可执行文件
- 静态库与动态库
创建静态库
gcc -c mylib.c -o mylib.o # 编译为对象文件
ar rcs libmylib.a mylib.o # 打包为静态库
gcc main.c -L. -lmylib -o app # 使用静态库
创建动态库(共享库)
gcc -fPIC -c mylib.c -o mylib.o # 编译为位置无关代码
gcc -shared mylib.o -o libmylib.so # 生成动态库
gcc main.c -L. -lmylib -o app # 使用动态库
运行时需指定库路径:
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
./app
- 高级选项
预处理(生成预处理后的代码)
gcc -E main.c -o main.i # 查看宏展开后的代码
生成汇编代码
gcc -S main.c -o main.s # 生成汇编文件
指定头文件/库路径
gcc main.c -I/my/include/path -L/my/lib/path -lmylib
```bash
7. 完整示例
假设项目结构如下:
```bash
project/
├── src/
│ ├── main.c
│ └── utils.c
└── include/└── utils.h
编译命令:
gcc -Iinclude/ -c src/main.c -o main.o
gcc -Iinclude/ -c src/utils.c -o utils.o
gcc main.o utils.o -o app
运行:
./app
- 常见问题
错误:找不到头文件
使用 -I 指定头文件目录:
gcc -I/path/to/headers ...
错误:未定义的引用
确保链接了所需的库(如数学库 -lm)。
动态库运行时找不到
设置 LD_LIBRARY_PATH:
export LD_LIBRARY_PATH=/path/to/libs:$LD_LIBRARY_PATH
掌握这些命令后,您已能应对大多数 C/C++ 编译场景!如需进一步学习,可通过 man gcc查阅手册。