gcc
(GNU Compiler Collection)是 GNU 编译器集合,其中 C 语言编译器 是最常用的部分。它是 开源、跨平台 的编译器,支持 C、C++、Objective-C、Fortran、Ada、Go 等多种语言。
主要功能
- 编译 C 代码 并生成可执行文件
- 优化代码 以提高执行效率
- 调试支持,可配合
gdb
进行调试 - 跨平台编译,可用于不同的操作系统(如 Linux、Windows、macOS)
基本用法:
可执行文件:
gcc main.c -o main # 编译 main.c 生成可执行文件 main
gcc -g main.c -o main # 生成带调试信息的可执行文件
gcc -O2 main.c -o main # 启用优化(提高运行效率)
预处理:
在 GCC 编译过程中,预处理(Preprocessing)是第一步,主要负责宏展开、头文件包含、条件编译等任务。GCC 提供 -E
选项来查看预处理结果。
gcc -E main.c -o main.i
-E
:仅进行预处理,不进行编译main.i
:输出预处理后的文件(默认为标准输出)
汇编:
GCC 支持将 C 代码编译为 汇编代码,使用 -S
选项即可生成 .s
汇编文件。
gcc -S main.c -o main.s
-S
:只编译到汇编阶段,不生成目标文件或可执行文件main.s
:输出的汇编代码文件
二进制:
直接编译为二进制可执行文件
gcc main.c -o main
main.c
:源代码文件-o main
:指定输出文件名main
(默认是a.out
)- 生成的
main
文件是 可执行二进制文件
仅编译,不链接
如果只想生成 二进制目标文件(.o 文件),可以用 -c
选项:
gcc -c main.c -o main.o
这样不会生成可执行文件,而是生成 main.o
,它包含了 机器代码,但还未链接到库。
手动编译和链接
假设有两个文件:
1️⃣ 文件 main.c
#include <stdio.h>
#include "utils.h"
int main() {
print_hello();
return 0;
}
2️⃣ 文件 utils.c
#include <stdio.h>
void print_hello() {
printf("Hello, world!\n");
}
3️⃣ 头文件 utils.h
#ifndef UTILS_H
#define UTILS_H
void print_hello();
#endif
🔹 编译和链接步骤
1️⃣ 先编译 utils.c
生成 .o
文件
gcc -c utils.c -o utils.o
2️⃣ 再编译 main.c
生成 .o
文件
gcc -c main.c -o main.o
3️⃣ 最后进行链接,生成 main
可执行文件
gcc main.o utils.o -o main
4️⃣ 运行
./main
输出:
Hello, world!
THE END
暂无评论内容