在 Linux 環境下進行 C 語言開發,是理解作業系統底層機制、編譯鏈結流程、工具鏈運作的最佳路徑。本文以 Ubuntu JeOS (Just Enough OS) 為基礎,在 VMware 虛擬機中從零建構純命令列開發環境:安裝系統、配置網路、安裝 build-essential (GCC/G++/Make)、配置 VIM 編輯器、撰寫多檔案專案與 Makefile、除錯基礎。適合嵌入式、系統程式、後端開發入門者建立扎實基本功。
# 1. 掛載 VMware Tools 虛擬光碟 (VMware 選單 → Virtual Machine → Install VMware Tools)
sudo mkdir -p /mnt/cdrom
sudo mount /dev/cdrom /mnt/cdrom
# 2. 解壓並安裝
cd /tmp
tar xzf /mnt/cdrom/VMwareTools-*.tar.gz
cd vmware-tools-distrib
sudo ./vmware-install.pl -d # -d 預設選項自動安裝
# 3. 重啟或重新載入模組
sudo reboot
共享資料夾啟用: VMware 設定 → Options → Shared Folders → Always enabled → 加入 Windows 資料夾 → 掛載點 /mnt/hgfs(需 vmhgfs-fuse)。
# 1. 確認介面名稱
ip link show # 或 ifconfig -a,通常為 ens33 或 eth0
# 2. 編輯 Netplan 配置 (Ubuntu 18.04+)
sudo vi /etc/netplan/00-installer-config.yaml
# 內容:
network:
version: 2
renderer: networkd
ethernets:
ens33: # 替換為實際介面名
dhcp4: true
# 3. 套用
sudo netplan apply
# 4. 驗證
ip addr show ens33
ping 8.8.8.8
# 更新套件索引
sudo apt update
# 一鍵安裝 GCC, G++, Make, libc-dev, binutils 等
sudo apt install build-essential
# 安裝除錯器
sudo apt install gdb
# 驗證版本
gcc --version
g++ --version
make --version
gdb --version
sudo apt install vim # 或 vim-gtk3 支援剪貼簿
# 編輯系統級或使用者級配置
vi ~/.vimrc
# 推薦基礎配置:
syntax on # 語法高亮
set number # 顯示行號
set relativenumber # 相對行號(方便跳轉)
set autoindent # 自動縮排
set smartindent # 智慧縮排 (C 語言)
set tabstop=4 # Tab 寬度
set shiftwidth=4 # 縮排寬度
set expandtab # Tab 轉空格
set cursorline # 高亮當前行
set hlsearch # 高亮搜尋
set incsearch # 漸進搜尋
set ignorecase # 搜尋忽略大小寫
set smartcase # 含大寫則區分大小寫
set mouse=a # 滑鼠支援
set clipboard=unnamedplus # 系統剪貼簿整合 (需 vim-gtk3)
set encoding=utf-8
set fileencodings=utf-8,cp950,big5
# 進階:安裝外掛管理器 (vim-plug) + 常用外掛
# 參考:https://github.com/junegunn/vim-plug
~/c_project/
├── include/
│ └── math.h
├── src/
│ ├── math.c
│ └── hello.c
└── Makefile
include/math.h#ifndef _MATH_H
#define _MATH_H
int factorial(int n); // 階乘
int sum_factorial(int n); // 1! + 2! + ... + n!
#endif
src/math.c#include "math.h"
int factorial(int n) {
if (n <= 1) return 1;
return n * factorial(n - 1);
}
int sum_factorial(int n) {
int sum = 0;
for (int i = 1; i <= n; ++i) sum += factorial(i);
return sum;
}
src/hello.c#include
#include "math.h"
int main() {
int n;
printf("請輸入正整數 n: ");
if (scanf("%d", &n) != 1 || n < 1) {
fprintf(stderr, "輸入無效\n");
return 1;
}
printf("1! + 2! + ... + %d! = %d\n", n, sum_factorial(n));
return 0;
}
CC = gcc
CFLAGS = -Wall -Wextra -O2 -Iinclude
TARGET = hello
SRCS = src/hello.c src/math.c
OBJS = $(SRCS:.c=.o)
all: $(TARGET)
$(TARGET): $(OBJS)
$(CC) -o $@ $^
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
clean:
rm -f $(OBJS) $(TARGET)
.PHONY: all clean
cd ~/c_project
make
./hello
# 輸入 5 → 輸出 1!+2!+3!+4!+5! = 153
# 1. 編譯加入除錯資訊
make clean
make CFLAGS="-Wall -Wextra -g -Iinclude"
# 2. 啟動 GDB
gdb ./hello
# 3. 常用指令
(gdb) break main # 在 main 設中斷點
(gdb) run # 執行
(gdb) next (n) # 單步跳過函式呼叫
(gdb) step (s) # 單步進入函式
(gdb) print n # 印出變數值
(gdb) backtrace (bt) # 呼叫堆疊
(gdb) continue (c) # 繼續執行
(gdb) quit # 離開
# 靜態庫
gcc -c src/math.c -o math.o -Iinclude
ar rcs libmath.a math.o
# 使用:gcc src/hello.c -o hello -Iinclude -L. -lmath
# 動態庫
gcc -fPIC -c src/math.c -o math.o -Iinclude
gcc -shared -o libmath.so math.o
# 使用:gcc src/hello.c -o hello -Iinclude -L. -lmath -Wl,-rpath,.
# 執行前:export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
vimtutor、VIM 進階技巧目錄、Vimer 部落格。從零打造 Linux C 開發環境,不僅是工具安裝,更是對「原始碼 → 預處理 → 編譯 → 組譯 → 連結 → 執行」完整生命週期的親身實踐。熟練掌握 apt 套件管理、gcc 編譯選項、make 依賴推導、vim 高效編輯、gdb 除錯流程,即擁有了在任何 Linux 伺服器、嵌入式裝置、雲端容器中進行 C/C++ 開發的通用鑰匙。建議後續深入:交叉編譯工具鏈、CMake 現代建構系統、Clang 靜態分析、Valgrind 記憶體檢測、Perf 效能分析,逐步邁向系統級開發專家。