在Linux系统中使用GCC(GNU Compiler Collection)编译程序的完整步骤如下:
若未安装GCC,先通过包管理器安装:
# Ubuntu/Debian
sudo apt update && sudo apt install gcc build-essential
# CentOS/RHEL
sudo yum install gcc make
# Arch Linux
sudo pacman -S gcc
验证安装:
gcc --version
创建一个C程序文件(如hello.c
):
#include <stdio.h>
int main() {
printf("Hello, Linux!\n");
return 0;
}
gcc hello.c -o hello
hello.c
:源文件-o hello
:指定输出可执行文件名为hello
./hello
输出结果:Hello, Linux!
# 1. 预处理(生成.i文件)
gcc -E hello.c -o hello.i
# 2. 编译为汇编代码(生成.s文件)
gcc -S hello.i -o hello.s
# 3. 汇编为目标文件(生成.o文件)
gcc -c hello.s -o hello.o
# 4. 链接为可执行文件
gcc hello.o -o hello
选项 | 说明 |
---|---|
-Wall |
启用所有警告信息 |
-O2 |
优化级别2(平衡速度与大小) |
-g |
添加调试信息(用于GDB) |
-I/path |
指定头文件路径 |
-L/path |
指定库文件路径 |
-lname |
链接动态库(如-lm 链接数学库) |
示例:
gcc -Wall -O2 hello.c -o hello
假设有main.c
和utils.c
:
# 直接编译
gcc main.c utils.c -o program
# 或分步编译(推荐)
gcc -c main.c -o main.o
gcc -c utils.c -o utils.o
gcc main.o utils.o -o program
静态库(.a):
ar rcs libutils.a utils.o
gcc main.c -L. -lutils -o static_program
动态库(.so):
gcc -shared -fPIC utils.c -o libutils.so
gcc main.c -L. -lutils -o dynamic_program
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH # 临时设置库路径
调试:使用-g
生成调试信息,配合GDB:
gcc -g buggy.c -o buggy
gdb ./buggy
优化:使用-O1
/-O2
/-O3
优化级别:
gcc -O3 fast.c -o fast
指定目标平台(如ARM):
arm-linux-gnueabi-gcc hello.c -o hello_arm
找不到头文件:
gcc -I/usr/local/include source.c
链接失败:
gcc program.c -L/usr/local/lib -lxxx
版本冲突:
使用update-alternatives
管理多版本GCC。
通过以上步骤,你可以灵活使用GCC完成从简单到复杂的编译任务。如需进一步学习,可查阅GCC官方文档(man gcc
)。