歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> 從零開始學Linux_11_gcc入門(上)

從零開始學Linux_11_gcc入門(上)

日期:2017/3/1 12:24:13   编辑:關於Linux

歡迎大家閱讀參考,如有錯誤或疑問請留言糾正,謝謝微笑



一、什麼是gcc 1、gcc(GNUC Compiler)編譯器的作者是RichardStallman,也是GNU項目的奠基者。 2、什麼是gcc:gcc是GNUCompiler Collection的縮寫。最初是作為C語言的編譯器(GNUC Compiler),現在已經支持多種語言了,如C、C++、Java、Pascal、Ada、COBOL語言等。 3、gcc支持多種硬件平台,甚至對DonKnuth 設計的 MMIX 這類不常見的計算機都提供了完善的支持

二、gcc特點 1、gcc是一個可移植的編譯器,支持多種硬件平台 2、gcc不僅僅是個本地編譯器,它還能跨平台交叉編譯。 3、gcc有多種語言前端,用於解析不同的語言。 4、gcc是按模塊化設計的,可以加入新語言和新CPU架構的支持 5、gcc是自由軟件

三、gcc編譯過程 1、預處理(Pre-Processing) 2、編譯(Compiling):生成匯編程序 3、匯編(Assembling):將匯編程序生成二進制目標程序 4、鏈接(Linking)

5、gcc編譯程序過程示意圖

\

hello程序是一個高級C語言程序,這種形式容易被人讀懂。為了在系統上運行hello.c程序,每條C語句都必須轉化為低級機器指令。然後將這些指令打包成可執行目標文件格式,並以二進制形式存儲器於磁盤中。



四、gcc常用選項

選項名

作用

-o

產生目標(.i、.s、.o、可執行文件等)

-c

通知gcc取消鏈接步驟,即編譯源碼並在最後生成目標文件

-E

只運行C預編譯器

-S

告訴編譯器產生匯編語言文件後停止編譯,產生的匯編語言文件擴展名為.s

-Wall

使gcc對源文件的代碼有問題的地方發出警告

-Idir

將dir目錄加入搜索頭文件的目錄路徑

-Ldir

將dir目錄加入搜索庫的目錄路徑

-llib

鏈接lib庫

-g

在目標文件中嵌入調試信息,以便gdb之類的調試程序調試


1、gcc示例 (1)、gcc -E hello.c -o hello.i(預處理) (2)、gcc -S hello.i -o hello.s(編譯) (3)、gcc -c hello.s -o hello.o(匯編,生成可重定位目標文件) (4)、gcc hello.o -o hello(鏈接,成可執行目標文件) (5)、gcc hello.c -o hello(直接編譯鏈接成可執行目標文件) (6)、gcc -c hello.c或gcc -c hello.c -o hello.o(編譯生成可重定位目標文件)
2、-Wall使用 (1)建議初學都加這個選項。下面這個例子如果不加-Wall選項編譯器不報任何錯誤,但是得到的結果卻不是預期的。

#include

int main(void)

{

printf("Twoplus two is %f", 4);

return 0;

}



五、gcc編譯多文件
1、存在三個文件 hello_fn.h hello_fn.c main.c
2、一次性編譯 (1)gcc hello_fn.cmain.c –o newhello
3、獨立編譯 (1)gcc -Wall -c main.c -o main.o (2)gcc -Wall -c hello_fn.c -o hello_fn.o (3)gcc -Wall main.o hello_fn.o -o newhello
4、獨立編譯的好處在於 假如現在修改了main.c的程序,采用獨立編譯的話,由於hello_fn.c沒有修改,不需要編譯hello_fn.c。僅需要編譯main.c:gcc -Wall -c main.c -o main.o。而采用一次性編譯的話,每次都會編譯hello_fn.c和main.c,相當於多編譯了一次hello_fn.c。對於大型程序來說,采用獨立編譯可以很好的降低編譯的時間。
Copyright © Linux教程網 All Rights Reserved