Linux 下 GCC 的使用
0 執行環境
-
本機系統:Windows 7
-
虛擬機器軟體:Oracle VM VirtualBox 6
-
虛擬機器系統:CentOS 7
1 GCC 簡介
GCC 是 GUN Compiler Collection的縮寫,可以支援多種語言編譯,比如 C,C++,Java,pascal 等。
2 GCC 常用選項
-
-o:生成目標
-
-E:啟用預處理。生成預處理檔案( .i 檔案)
-
-S:啟用預處理、編譯。生成彙編程式碼( .s 檔案)
-
-c:啟用預處理、編譯、彙編。生成目標檔案( .o 檔案)
-
-Wall:開啟編譯警告
-
-g:包含除錯資訊
-
-llib:連結 lib 庫
-
-I:指定標頭檔案目錄
-
-Idir:增加 include 目錄(標頭檔案路徑)
-
-LDir:增加 lib 目錄(編譯靜態庫和動態庫)
3 GCC 編譯
3.0 示例程式碼
示例程式如下:
//hello.c
#include <stdio.h>
int main(void)
{
printf("Hello World!\n");
return 0;
}
vim 編輯器中的程式碼:
當前所在的位置:
3.1 四個過程
3.1.1 預處理
編譯器將 C 原始碼中的包含的標頭檔案如stdio.h編譯進來,替換巨集。
gcc -E hello.c -o hello.i
3.1.2 編譯
GCC 首先要檢查程式碼的規範性、是否有語法錯誤等,以確定程式碼的實際要做的工作,在檢查無誤後,GCC 把程式碼翻譯成組合語言。
gcc –S hello.i –o hello.s
3.1.3 彙編
把編譯階段生成的 ”.s” 檔案轉成二進位制目的碼。
gcc –c hello.s –o hello.o
3.1.4 連結
連結到庫中,生成可執行檔案。
gcc hello.o –o hello
3.2 一次性完成
輸入命令 gcc hello.c -o hello
,如下圖所示:
執行編譯後的可執行程式 ./hello
,如下圖所示:
4 多個檔案的編譯方法
現在有 3 個檔案,分別是 main.c,print.c,print.h
main.c 如下所示:
// main.c
#include "print.h"
int main(void)
{
print();
return 0;
}
print.c 如下所示:
// print.c
#include <stdio.h>
void print(void)
{
printf("you have done well !\n");
}
print.h 如下所示:
// print.h
void print();
4.1 假如標頭檔案和原始檔都在一個目錄下
4.1.1 多個檔案一起編譯
在 shell 中輸入:
gcc print.c main.c -o main_print
如下所示:
4.1.2 分別編譯各個原始檔,再對編譯後輸出的目標檔案(.o)連結
在 shell 中輸入:
gcc -c print.c -o print.o
gcc -c main.c -o main.o
gcc print.o main.o -o main_print
如下所示:
4.2 假如標頭檔案和原始檔不在一個目錄下
原始檔所在目錄:
標頭檔案在 myInclude 目錄下:
在 shell 中輸入,主要是要加 -I 指定標頭檔案目錄
gcc print.c main.c -o main_print -I myInclude
執行截圖: