Ubuntu 12.04 已经是一个非常古老且不再受支持的操作系统,它已于 2025 年 4 月停止官方支持,这意味着:

- 安全风险:它不会再接收任何安全更新,你的系统很容易受到攻击。
- 软件过时:系统自带的软件包版本非常老旧,无法满足现代开发需求。
- 兼容性问题:现代的编译器、库和工具可能无法在它上面正常安装或运行。
强烈建议如果你是为了学习或工作,请升级到一个现代的、仍在支持的 Ubuntu LTS 版本,Ubuntu 20.04 LTS 或 Ubuntu 22.04 LTS,这会让你获得更好的体验、更高的安全性和更丰富的软件资源。
如果你仍然需要在 Ubuntu 12.04 这个特定环境下进行 C 语言开发,下面是完整的指南。
第一步:安装必要的开发工具
在 Ubuntu 上,C 语言开发的核心工具链通常由 build-essential 这个元数据包提供,它会自动安装编译器 gcc、g++、make 以及其他必要的头文件和库。
打开终端,执行以下命令:

sudo apt-get update sudo apt-get install build-essential
sudo apt-get update:更新软件包列表,确保你能获取到最新的(尽管是 12.04 的)“最新”软件。sudo apt-get install build-essential:安装 C/C++ 编译器和构建工具。
安装完成后,你可以验证一下是否安装成功:
gcc --version
你应该能看到类似下面的输出(版本号会是 4.6.x 左右):
gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
第二步:编写你的第一个 C 程序 ("Hello, World!")
现在我们来创建一个简单的 C 程序。
-
创建源文件 使用你喜欢的文本编辑器,
nano或vim,这里我们用nano,因为它对新手更友好。
(图片来源网络,侵删)nano hello.c
-
输入代码 在打开的编辑器中,输入以下代码:
#include <stdio.h> int main() { printf("Hello, World!\n"); return 0; }#include <stdio.h>:包含了标准输入输出库,这样我们才能使用printf函数。int main():这是 C 程序的入口点。printf("Hello, World!\n");:在屏幕上打印 "Hello, World!"。\n是一个换行符。return 0;:表示程序正常结束。
-
保存并退出 在
nano中,按Ctrl + X,然后按Y确认保存,最后按Enter键确认文件名。
第三步:编译和运行程序
C 语言是编译型语言,需要将源代码(.c 文件)转换成计算机可以执行的可执行文件(hello)。
-
编译 使用
gcc编译器来编译hello.c。gcc hello.c -o hello
gcc:编译器命令。hello.c:你的源文件。-o hello:指定输出的可执行文件名为hello,如果不写-o,默认会生成一个名为a.out的文件。
-
运行 编译成功后,你会看到当前目录下多了一个名为
hello的文件,现在运行它:./hello
- 表示在当前目录下执行这个文件。
你应该能在终端看到输出:
Hello, World!
第四步:使用调试器 GDB
当你的程序出现逻辑错误时,调试器就派上用场了,GDB (GNU Debugger) 是 Linux 下最常用的调试工具。
-
编译时加入调试信息 为了让 GDB 能够查看源代码和变量,在编译时需要加上
-g选项。gcc -g hello.c -o hello_debug
-
启动 GDB
gdb ./hello_debug
你会进入 GDB 的交互式界面。
-
常用 GDB 命令 在
(gdb)提示符下,你可以输入以下命令:list(或l):列出源代码。break main(或b main):在main函数开头设置一个断点。run(或r):开始运行程序,程序会在断点处暂停。next(或n):执行下一行代码(不进入函数内部)。step(或s):执行下一行代码(如果遇到函数,会进入函数内部)。print i(或p i):打印变量i的值。continue(或c):继续运行程序,直到下一个断点或程序结束。quit(或q):退出 GDB。
第五步:使用 Makefile 进行项目管理
当你的项目变得复杂,有多个源文件时,每次手动编译就会变得很麻烦。Makefile 和 make 命令可以自动化这个过程。
-
创建项目结构 假设我们有两个文件:
main.c和utils.c。-
main.c:#include <stdio.h> #include "utils.h" int main() { int result = add(5, 3); printf("The result is: %d\n", result); return 0; } -
utils.c:#include "utils.h" int add(int a, int b) { return a + b; } -
utils.h(头文件):#ifndef UTILS_H #define UTILS_H int add(int a, int b); #endif
-
-
创建 Makefile 在项目根目录创建一个名为
Makefile的文件(注意首字母大写)。# 定义变量 CC = gcc CFLAGS = -Wall -g TARGET = my_program # 定义所有目标文件 OBJS = main.o utils.o # 默认目标:当执行 make 时,默认会执行这个 all: $(TARGET) # 链接规则:如何生成最终的可执行文件 $(TARGET): $(OBJS) $(CC) $(CFLAGS) -o $@ $^ # 编译规则:如何从 .c 文件生成 .o 文件 %.o: %.c $(CC) $(CFLAGS) -c -o $@ $< # 清理规则:删除所有生成的文件 clean: rm -f $(TARGET) $(OBJS) # .PHONY 表示这是一个伪目标,不生成文件 .PHONY: all cleanCC = gcc:指定编译器。CFLAGS = -Wall -g:编译选项,-Wall显示所有警告,-g包含调试信息。TARGET = my_program:最终的可执行文件名。OBJS = main.o utils.o:所有中间的目标文件(.o文件)。all: $(TARGET):all是一个伪目标,它依赖于$(TARGET)。$(TARGET): $(OBJS):这是链接规则,告诉make如何将目标文件链接成最终程序。%.o: %.c:这是一个模式规则,告诉make如何从任何.c文件生成对应的.o文件。clean::清理命令,用于删除所有生成的文件。.PHONY: all clean:声明all和clean是伪目标。
-
使用 make 在终端中,只需输入
make:make
make会读取Makefile并自动执行必要的编译和链接步骤,如果再次运行make,它会发现文件没有变化,提示 `my_program' is up to date.。要清理项目,运行:
make clean
总结与重要提醒
| 步骤 | 命令 | 说明 |
|---|---|---|
| 安装工具 | sudo apt-get install build-essential |
安装 GCC, G++, make 等核心工具。 |
| 编译 | gcc hello.c -o hello |
将 hello.c 编译为可执行文件 hello。 |
| 运行 | ./hello |
执行当前目录下的 hello 程序。 |
| 调试 | gcc -g hello.c -o hellogdb ./hello |
编译时加入调试信息,然后用 GDB 进行调试。 |
| 项目管理 | 创建 Makefilemakemake clean |
使用 Makefile 自动化多文件项目的编译和清理。 |
再次强调:Ubuntu 12.04 是一个过时的环境,如果你有机会,请务必迁移到现代的 Ubuntu 版本,在那里,你可以使用更新、更安全的工具链,GCC 9/11/12,以及更先进的构建系统如 CMake。
