插件窝 干货文章 Linux编译器--gcc/g++使用方式

Linux编译器--gcc/g++使用方式

program GCC 编译 bash 187    来源:    2025-04-01

GCC/G++ 编译器使用指南

GCC (GNU Compiler Collection) 是 Linux 系统中最常用的编译器套件,其中 gcc 用于编译 C 程序,g++ 用于编译 C++ 程序。

基本使用方式

1. 编译简单程序

# 编译C程序
gcc hello.c -o hello

# 编译C++程序
g++ hello.cpp -o hello

2. 分步编译过程

GCC 编译过程分为四个阶段: 1. 预处理 2. 编译 3. 汇编 4. 链接

可以分步执行:

# 预处理(生成.i文件)
gcc -E hello.c -o hello.i

# 编译(生成.s汇编文件)
gcc -S hello.i -o hello.s

# 汇编(生成.o目标文件)
gcc -c hello.s -o hello.o

# 链接(生成可执行文件)
gcc hello.o -o hello

常用编译选项

1. 警告选项

# 显示所有警告
gcc -Wall program.c -o program

# 将警告视为错误
gcc -Werror program.c -o program

# 显示更多警告
gcc -Wall -Wextra program.c -o program

2. 优化选项

# 无优化(默认)
gcc -O0 program.c -o program

# 基本优化
gcc -O1 program.c -o program

# 更多优化
gcc -O2 program.c -o program

# 激进优化(可能影响调试)
gcc -O3 program.c -o program

# 优化代码大小
gcc -Os program.c -o program

3. 调试选项

# 生成调试信息
gcc -g program.c -o program

# 生成更详细的调试信息
gcc -ggdb program.c -o program

4. 标准版本选择

# C语言标准选择
gcc -std=c89 program.c
gcc -std=c99 program.c
gcc -std=c11 program.c
gcc -std=c17 program.c

# C++标准选择
g++ -std=c++98 program.cpp
g++ -std=c++11 program.cpp
g++ -std=c++14 program.cpp
g++ -std=c++17 program.cpp
g++ -std=c++20 program.cpp

多文件编译

1. 分别编译后链接

# 编译各个源文件
gcc -c file1.c -o file1.o
gcc -c file2.c -o file2.o

# 链接目标文件
gcc file1.o file2.o -o program

2. 直接编译多个源文件

gcc file1.c file2.c -o program

库文件处理

1. 静态库

# 创建静态库
ar rcs libmylib.a file1.o file2.o

# 使用静态库
gcc program.c -L. -lmylib -o program

2. 动态库(共享库)

# 创建动态库
gcc -shared -fPIC -o libmylib.so file1.c file2.c

# 使用动态库
gcc program.c -L. -lmylib -o program

# 设置动态库路径(运行时)
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.

其他实用选项

1. 宏定义

# 定义宏
gcc -DDEBUG program.c -o program

# 等价于在代码中添加 #define DEBUG

2. 包含路径

# 添加头文件搜索路径
gcc -I/path/to/headers program.c -o program

3. 输出汇编代码

# 生成汇编代码(带C源码)
gcc -S -fverbose-asm program.c

4. 查看预处理器输出

# 查看预处理后的代码
gcc -E program.c

版本信息

# 查看gcc版本
gcc --version

# 查看详细版本信息
gcc -v

实际使用示例

# 典型开发编译命令
g++ -Wall -Wextra -std=c++17 -O2 -g main.cpp utils.cpp -I./include -L./lib -lmylib -o myapp

# 解释:
# -Wall -Wextra: 开启所有警告
# -std=c++17: 使用C++17标准
# -O2: 优化级别2
# -g: 生成调试信息
# -I./include: 添加include目录到头文件搜索路径
# -L./lib: 添加lib目录到库文件搜索路径
# -lmylib: 链接mylib库

掌握这些 GCC/G++ 的使用方法,能够满足大多数 Linux 下的 C/C++ 开发需求。