1. 程式人生 > 實用技巧 >Linux 下 GCC 的使用

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

執行截圖: