1. 程式人生 > >Linux系統GCC常用命令和GCC編譯過程描述

Linux系統GCC常用命令和GCC編譯過程描述

前言:

GCC 原名為 GNU C 語言編譯器(GNU C Compiler),因為它原本只能處理 C語言。GCC 很快地擴充套件,變得可處理 C++。後來又
擴充套件能夠支援更多程式語言,如Fortran、Pascal、Objective-C、Java、Ada、Go以及各類處理器架構上的組合語言等,所以改
名GNU編譯器套件(GNU Compiler Collection)。(百度百科,想了解自己查詢)


一.GCC程式的編譯過程大概分四個階段

  • 預處理(Pre-Processing)
  • 編譯(Compiling)
  • 彙編(Assembling)
  • 連結(Linking)

二.簡單HelloWorld程式的編譯過程

示例:HelloWorld.c

1 #include <stdio.h>
2 int main()
3 {
4   printf("Hello World!\n");
5   return 0;
6 }

Ctrl+Alt+T  --->開啟控制檯--->輸入vim HelloWorld.c

1. 執行如下命令:$ gcc -o HelloWorld HelloWorld.c


執行如下 : $ ./HelloWorld
輸出: HelloWorld!


2. 分步編譯如下:
(1) $ gcc –E HelloWorld.c -o HelloWorld.i

可以輸出HelloWorld.i檔案中存放著HelloWorld.c經預處理之後的程式碼。開啟HelloWorld.i檔案,看一看,就明白了。後面那條指令,是直接在命令列視窗中輸出預處理後的程式碼.

gcc的-E選項,可以讓編譯器在預處理後停止,並輸出預處理結果。在本例中,預處理結果就是將stdio.h 檔案中的內容插入到HelloWorld.c中了。


//預處理結束
//這時候你看一下HelloWorld.i ,可以看到插進去了很多東西。


(2) $ gcc –S HelloWorld.i     

gcc的-S選項,表示在程式編譯期間,在生成彙編程式碼後,停止,-o輸出彙編程式碼檔案。

檢視下HelloWorld.s //生成彙編程式碼後結束



(3)生成彙編程式碼檔案HelloWorld.s以後,需要gas彙編器負責將其編譯為目標檔案,如下:

$ gcc –c HelloWorld.c
或者:
$ gcc -c HelloWorld.c –o HelloWorld.o
或者:
$ gcc -c HelloWorld.i -o HelloWorld.o

//編譯結束
//生成 HelloWorld.o檔案


(4) $ gcc HelloWorld.o –o HelloWorld 生成連線,可執行檔案(HellWorld重新生成的可執行檔案)

gcc聯結器是gas提供的,負責將程式的目標檔案與所需的所有附加的目標檔案連線起來,最終生成可執行檔案。

附加的目標檔案包括靜態連線庫和動態連線庫。

對於上一小節中生成的HelloWorld.o,將其與C標準輸入輸出庫進行連線,最終生成程式HelloWorld可執行檔案

輸入命令:gcc HelloWorld.o –o HelloWorld--->生成如下圖:

3. 多個程式檔案的編譯

一般情況一個程式都是有若干個檔案原始檔組成,所以編譯的時候需要形成多個編譯單元,使用GCC編譯器可以將多個原始檔編譯成所需要的程式

比如:原始檔有main.c     a.c     b.c  最終生成一個可執行的檔案main

比如:一個工程有main.c a.c b.c生成test的可執行檔案。
編譯命令如下:
$ gcc –c main.c a.c b.c –o main
或者:
$ gcc –o main main.c a.c b.c

GCC仍然會按照預處理、編譯和連結的過程依次進行

大概過程相當於:

gcc -c main.c -o main.o

gcc -c a.c -o a.o

gcc -c b.c -o b.o

最後:

gcc main.o a.o b.o -o main

相關推薦

Linux系統GCC常用命令GCC編譯過程描述

前言: GCC 原名為 GNU C 語言編譯器(GNU C Compiler),因為它原本只能處理 C語言。GCC 很快地擴充套件,變得可處理 C++。後來又 擴充套件能夠支援更多程式語言,如Fortran、Pascal、Objective-C、Java、Ada、Go以及各類處理器架構上的組合語言等,所以改

gcc 常用命令引數

.h           //C/C++標頭檔案 .c           //C的原始檔 .cc         //C++ 的原始檔 .cpp      //C++ 的原始檔 .cxx       //C++ 的原始檔 .i           //gcc 編譯的過程檔

Linux GCC常用命令gcc 編譯器常用命令列引數一覽

轉載自:http://www.cnblogs.com/sunyubo/archive/2011/09/06/2282054.html 這些常用的 gcc/g++ 命令列引數,你都知道麼? 1. gcc -E source_file.c-E,只執行到預編譯。直接輸出預編譯結果

linux系統配置常用命令整理

sta 字母 port 內存大小 查看內存 四十七 mes memfree 監聽 一、 cat /proc/cpuinfo |grep "model name" && cat /proc/cpuinfo |grep "phys

Linux 系統監控常用命令

索引 zest rec inter 常用命令 節點 bash intern 虛擬 簡介 列舉操作系統級監控常用的幾個方法,建議收藏使用 CPU top 命令可用於監控系統整體負載,包括cpu、內存使用等,能夠實時顯示系統中各個進程的資源占用狀況 輸出樣例 top - 19:

Linux系統》之"皮毛系列"(三) Linux系統常用命令

通過前兩篇文章的介紹,我們知道Linux系統的理念是:一切皆檔案。而檔案,就要涉及到命名規範,如下所示: 1)除了/之外,所有字元都合法 2)有些字元最好不要用,如空格符、製表符、字元@#$&()-等 3)避免使用.作為普通檔名的第一個字元。 4)大小寫敏感 今天我們來

Linux-系統管理-常用命令(上)

以下介紹常用的幾個系統分析的命令以及常用方法: vmstat vmstat 是Virtual Meomory Statistics(虛擬記憶體統計)的縮寫,很多Linux發行版本都預設安裝了此命令工具。當然,不止對虛擬記憶體有統計,還可以利用vmst

linux的一些常用命令emacs的一些快捷鍵

本人是linux新手,把一些常用的命令記在這裡。 檢視ubuntu版本 sudo lsb_release -a 安裝軟體 sudo apt-get install ***   eg:sudo apt-get install apt-file 刪除軟體 sudo apt-ge

企業Linux系統管理員常用命令大全例項解析(1)

作為一名企業Linux系統管理員,熟悉並熟練運用一些常用的命令是必不可少的,對裝置即檔案的Linux系統來說,Linux系統管理的命令是它正常執行的核心。筆者根據實際工作總結一些常用指令,附上一些

Linux系統常用命令

刪除 date pack package 進行 查找 sea 新的 ret yum [options] [command] [package ...]options:可選,選項包括-h(幫助),-y(當安裝過程提示選擇全部為"yes"),-q(不顯示安裝的過程)等等。com

linux常用命令以及gcc、gdb、vim的安裝配置

1.       linux是一個類unix作業系統       vmware--虛擬出一個硬體環境用於安裝一個作業系統       虛擬機器--在vmware中的這個虛擬的這個硬體環境/安裝的這個作業系統       xshell功能:遠端連線到虛擬機器/伺服器上堆虛擬機器

Linux GCC常用命令

靜態加載 配置文件 情況 窗口 連接器 執行 二進制 c 語言 標準輸入輸出 Linux GCC常用命令 1簡介 2簡單編譯 2.1預處理 2.2編譯為匯編代碼(Compilation) 2.3匯編(Assembly) 2.4連接(Linking) 3

Linux系統vi/vim的常用命令操作

1 、游標移動命令: 0:移動到游標所在行的行首[Home] $:移動到游標所在行的行尾[End] ctrl+d:向下半頁 ctrl+f:向下一頁PageDown ctrl+u:向上半頁 ctrl+b:向上一頁PageUp H:移動到視窗的第一行 M:移動到視

linux系統管理文件目錄管理命令測試

linux 簡單 命令 1. 查看系統中cpu及內存的信息。[root@xuexi ~]# cat /proc/cpuinfo (查看cpu)processor : 0 vendor_id :GenuineIntelcpu family : 6model : 142mode

Linux操作系統常用命令

命令1. 常用命令:1.1 ls命令:1.2 cd 命令: 1.3 cal命令 cal是calendar的意思1.4 echo 命令echo -necho -e "The year is 2018. \nToday is 8. "2. 命令類型:3. date:時間管理:Linux:

查看linux系統常用命令Linux查看系統配置常用命令

程序 任務 host temp lan linked linux cpu 活動 mic 一、linux CPU大小 cat /proc/cpuinfo |grep "model name" && cat /proc/cpuinfo |grep "physi

Linux學習並不難》Linux字符界面(2):關閉重啟Linux系統之shutdown命令

Linux shutdown 關機 3.2 《Linux學習並不難》Linux字符界面(2):關閉和重啟Linux系統之shutdown命令shutdown命令可以安全地關閉或重啟Linux系統,有些用戶會使用直接斷掉電源的方式來關閉計算機,這是十分危險的。Linux系統與Windows不同,其

第二課:第一講Linux操作系統常用命令

d第二課:第一講Linux操作系統及常用命令1.liunx中“X”表示圖像顯示協議X-window有三種:Gnome,KDE,Xface2.windows->.dll(dynamic link library)liunx->.so (shared object)3.認證:authenticatio

第二講:第二課Linux操作系統常用命令

排版 普通用戶 命令格式 配置文件 see 電池 硬件 -h comm 第二講:第二課Linux操作系統及常用命令1.date-顯示系統時間修改時間2.liunx記時模式:晶體振蕩器,高級的每萬年誤差一秒。主機上就是晶體振蕩器紀時的。晶體振蕩器要供電才行,主板上有紐扣電池。

gcc常用命令

lin href 支持 可執行文件 編譯預處理 操作 執行文件 多源 -o2 gcc命令使用GNU推出的基於C/C++的編譯器,是開放源代碼領域應用最廣泛的編譯器,具有功能強大,編譯代碼支持性能優化等特點。現在很多程序員都應用GCC,怎樣才能更好的應用GCC。目前,GCC