首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Linux 下 C 語言開發全流程:Gedit 編寫、GCC 編譯鏈接與多文件項目實戰

     編輯:關於C語言

Linux 是 C/C++ 開發的原生平台。本文以 Deepin (基於 Debian/Ubuntu) 為例,手把手教學:安裝 Gedit 編輯器、編寫首個 Hello, Linux 程序、使用 GCC 單步/一鍵編譯鏈接、多源文件項目構建、常用警告選項與運行權限設置,助你快速上手 Linux 開發環境。

環境準備:Gedit 編輯器

Gedit 圖形界面友好、支持語法高亮、輕量級,適合初學者。

# 添加倉庫並安裝 (Ubuntu/Deepin 等 Debian 系)
sudo apt-add-repository ppa:ubuntu-on-rails/ppa
sudo apt-get update
sudo apt-get install gedit-gmate

創建並編輯源文件

touch hello.c          # 創建空文件
gedit hello.c          # 打開編輯

輸入代碼(注意 Gedit 右下角語言模式顯示 "C",否則手動選擇):

#include <stdio.h>
#include <stdlib.h>
int main() {
    printf("Hello, Linux.\n");
    exit(0);
}

GCC 編譯器:從源碼到可執行文件

GCC (GNU Compiler Collection) 是 Linux 標準編譯工具鏈,預裝於絕大多數發行版。

一鍵編譯鏈接(最常用)

gcc hello.c -o hello
  • -o hello 指定輸出文件名(默認 a.out)。
  • 生成的 hello **無後綴**,Linux 通過執行權限位識別可執行文件。

四階段分步編譯(理解底層流程)

階段命令產出說明
預處理gcc -E hello.c -o hello.i.i 展開頭文件、宏處理 #include、#define 等
編譯gcc -S hello.i -o hello.s.s 匯編代碼生成 AT&T 語法匯編
匯編gcc -c hello.s -o hello.o.o 目標文件 (機器碼)含符號表、重定位信息
鏈接gcc hello.o -o hello可執行文件解析符號、合併庫代碼

多源文件項目編譯

# 分別編譯為目標文件
gcc -c main.c -o main.o
gcc -c utils.c -o utils.o
# 統一鏈接
gcc main.o utils.o -o myapp

優勢:修改單文件只需重編譯該文件,大項目顯著提速。

運行與權限管理

./hello                 # 當前目錄下運行 (需 ./ 前綴)
# 若提示 Permission denied:
chmod +x hello          # 添加執行權限 (推薦)
# 或 sudo chmod 777 hello  (不推薦,過度授權)

必備警告選項:提前攔截 Bug

gcc -Wall -Wextra -pedantic -Werror hello.c -o hello
選項作用
-Wall啟用常見警告 (未使用變量、格式串不匹配、隱式轉換等)
-Wextra額外警告 (如空循環體、舊式函數聲明)
-pedantic嚴格 ISO C 標準,警告 GNU 擴展用法
-Werror**將所有警告視為錯誤**,強制修復

建議:開發階段**始終加上** -Wall -Wextra -Werror,養成零警告習慣。

進階:Makefile 自動化構建 (簡介)

手動敲命令不適用於多文件項目。編寫 Makefile,一鍵 make 自動增量構建:

CC = gcc
CFLAGS = -Wall -Wextra -Werror -std=c11
OBJS = main.o utils.o
myapp: $(OBJS)
	$(CC) $(CFLAGS) -o $@ $^
%.o: %.c
	$(CC) $(CFLAGS) -c $< -o $@
clean:
	rm -f *.o myapp

總結

  • Gedit + GCC = 輕量級 Linux C 開發起步組合。
  • 掌握四階段編譯流程,理解 .i/.s/.o 中間產物。
  • 多文件用分別編譯 + 統一鏈接,或直接 Makefile。
  • **警告即錯誤** (-Werror),養成高質量代碼習慣。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved