linux系統下通過GCC編譯C C 程式

2021-10-04 21:11:34 字數 2261 閱讀 1387

在這裡插入描述

三、gcc編譯c/c++的過程

通過命令gcc -v檢視當前的gcc版本:

gcc -v
如下所示:

當出現如下問題:

command 『gcc』 not found, but can be installed with:sudo apt install gcc

解決辦法:通過sudo apt install gcc安裝gcc編譯器

gcc是乙個強大的工具集合,它包含了預處理器、編譯器、彙編器、鏈結器等元件。它會在需要的時候呼叫其他元件。

輸入檔案的型別和傳遞給gcc的引數決定了gcc呼叫具體的哪些元件

對於開發者,它提供的足夠多的引數,可以讓開發者全面控制**的生成,這對嵌入式系統級的軟體開發非常重要。

gcc [選項] 檔名
選項

含義-v

檢視gcc編譯器的版本,顯示gcc執行時的詳細過程

-o [filename]

指定輸出檔名為file

-e只預處理,不會編譯、彙編、鏈結

-s只編譯,不會彙編、鏈結

-c編譯和彙編,不會鏈結

在vi/vim編輯器下編輯.c原始檔

#include

intmain()

編譯和執行:

gcc -o testgcc testgcc.c  一次編譯(忽略中間過程)

./testgcc 執行

乙個c/c++檔案要經過預處理(preprocessing)、編譯(compilation)、彙編(assembly)、和連線(linking)才能變成可執行檔案。

hello.c → hello.i → hello.s → hello.o → hello預處理就是將要包含(include)的檔案插入原檔案中、將巨集定義展開、根據條件編譯命令選擇要使用的**,最後將這些**輸出到乙個「.i」檔案中等待進一步處理。

使用 -e 引數輸出檔案的字尾名為:".cpp"

gcc -e -o testgcc.cpp testgcc.c   (預編譯)
使用wc命令比較預處理後的檔案與原始檔,對比兩個檔案的差異

wc testgcc.c testgcc.cpp
可以看到預處理之後的檔案相比原始檔變大了很多。

預處理檔案 → 彙編**

gcc -x cpp-output -s -o testgcc.s testgcc.cpp
直接編譯到彙編**:gcc -s hello.c

彙編** → 目標**

gcc -x assembler -c testgcc.s
使用彙編器生成目標**:

as -o testgcc.o testgcc.s
直接編譯成目標**:gcc -c testgcc.c彙編就是將第二步輸出的彙編**翻譯成符合一定格式的機器**,在linux系統上一般表現位elf目標檔案(obj檔案)。

目標** → 執行**

gcc -o testgcc testgcc.o
直接生成執行**:gcc -o testgcc testgcc.c鏈結就是將彙編生成的obj檔案、系統庫的obj檔案、庫檔案鏈結起來,最終生成可以在特定平台執行的可執行程式。

注:彙編**和執行**都屬於二進位制**

gcc 的高階選項:-wall 開啟所有的警告資訊

gcc -wall -o testgcc testgcc.c

gcc編譯系統

常用檔名字尾及其表示的檔案型別如下表 檔名字尾 檔案型別 cc 原始檔 i預處理後的 c 原始檔 ii預處理後的 c 原始檔 hc 或 c 標頭檔案 c cc cp cpp c cxx c 原始檔 s匯程式設計序檔案 s必須預處理的匯程式設計序檔案 o目標檔案 a靜態鏈結庫 so動態鏈結庫 預處理之...

Linux下編譯安裝GCC 4 9 2

先準備檔案 gcc 4.9.2.tar.bz2 mpfr 2.4.2.tar.gz mpc 0.8.1.tar.gz gmp 4.3.2.tar.bz2 m4 1.4.17.tar.xz 我將原始碼解壓到 root gcc目錄下了 習慣用root使用者登入,不是root使用者的可用su命令切換到ro...

Linux下gcc編譯過程例項講解

本次講解基於c 在ubuntu下編譯一段例項 詳細講解gcc的編譯過程。通過本教程,你將掌握linux下gcc編譯過程和原理。詳見我的部落格 linux下c c 編譯原理及過程 file main.c brief 測試 author zyf date 2020 12 09 23 28 20 vers...