gcc/ C 语言编译器

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
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容