1. 程式人生 > >嵌入式Linux C程式設計學習之路(三)——初識GCC

嵌入式Linux C程式設計學習之路(三)——初識GCC

       Gcc(GNU C Compiler)是GNU推出的功能強大、效能優越的多平臺編譯器,是GNU的代表作之一。Gcc可以在多種硬體平臺上編譯出可執行程式,其執行效率與一般的編譯器相比平均效率要高20%~30%。

      Gcc最基本的用法是∶gcc [options] filenames
options:編譯器所需要的編譯選項 ,filenames: 要編譯的檔名。

vim hello.c→gcc hello.c→./a.out

在編譯選項預設情況下,預設生成a.out可執行檔案,使用bash可以直接執行該程式碼。

hello.c程式碼:

#include"stdio.h"
void main()
{
printf("hello world\n");
}

    執行a.out可以看出執行正常。

[[email protected] kkw]# ./a.out 
hello world

     GCC編譯器能將C/C++語言源程式、彙編程式形成可執行檔案。整個形成過程可以被細分為四個階段:Hello.c預處理→Hello.i編譯→Hello.s彙編→Hello.o連線→hello

Gcc通過後綴來區別輸入檔案的類別,常見型別有:
.c為字尾的檔案: C語言原始碼檔案
.a為字尾的檔案: 是由目標檔案構成的庫檔案
.C,.cc或.cxx 為字尾的檔案: 是C++原始碼檔案
.h為字尾的檔案: 標頭檔案
.o為字尾的檔案: 是編譯後的目標檔案
.s為字尾的檔案: 是組合語言原始碼檔案

     在使用gcc編譯時,最重要的就是掌握gcc編譯選項,這些選項大約有一百個,大部分我們很少用到或者根本用不到,只有幾個根本的、最常用的選項,我們掌握了這幾個選項,使用gcc也就沒有太大問題了。

1:-o output_filename:確定可執行檔案的名稱為output_filename。如果不給出這個選項,gcc就給出預設的可執行檔案a.out。

[[email protected] kkw]# gcc -o hello.o hello.c 
[[email protected] kkw]# ls
hello.c  hello.o  workspace  公共的  模板  視訊  圖片  文件  下載  音樂  桌面
[
[email protected]
kkw]# ./hello.o hello world

2:-O,對程式進行優化編譯、連結,採用這個選項,整個原始碼會在編譯、連線過程中進行優化處理,這樣產生的可執行檔案的執行效率可以提高,但是,編譯、連線的速度就相應地要慢一些。
-O2,比-O更好的優化編譯、連線,當然整個編譯、連線過程會更慢。

3:-c:不連結。編譯器只是由輸入的.c等原始碼檔案編譯生成.o為字尾的中間檔案。(二進位制檔案)

[[email protected] kkw]# gcc -c hello.c
[[email protected] kkw]# ls
a.out    hello.o    公共的  視訊  文件  音樂
hello.c  workspace  模板    圖片  下載  桌面
[[email protected] kkw]# ./hello.o
bash: ./hello.o: 許可權不夠
[[email protected] kkw]# chmod a+x hello.o
[[email protected] kkw]# ./hello.o
bash: ./hello.o: cannot execute binary file

4:-g:產生除錯工具(GNU的gdb)所需要的符號資訊,要想對編譯出的程式進行除錯,就必須加入這個選項

5:-I dirname: 將dirname所指出的目錄作為編譯器尋找標頭檔案的標準路徑。
C程式中的標頭檔案包含兩種情況∶
 #include <A.h>
#include “B.h”
對於<>,gcc在系統預設的標頭檔案目錄(如/usr/include)中搜尋相應的檔案;而對於” ”,gcc在當前目錄中搜尋標頭檔案。-I選項的作用是告訴gcc,如果在當前目錄中沒有找到需要的檔案,就到指定的dirname目錄中去尋找。
   gcc的作用僅為編譯器,他能讓我們更加深入瞭解程式碼執行的機制,對深入理解C語言有著很大的幫助。

相關推薦

no