Linux應用開發(一):gcc 編譯器

來源:互聯網
上載者:User

一、預熱:

        1、gcc是GNU推出的一款基於linux系統的編譯器,gcc可以編譯的程式有:c、c++,組譯工具,

        2、在linux系統下,檔案是否可執行不是由檔案名稱尾碼來決定,而是由檔案的屬性(-x)來決定;

        3、gcc是通過檔案名稱尾碼來區別輸入檔案的類別,eg:

               
(1)、“.c” ,C語言,“.i”已經預先處理過的C原始碼檔案

                (2)、“.s”,組合語言 ,“.S”經過先行編譯的組合語言原始碼檔案              

               
(3)、“.C、.cc、.cxx”,C++,“.ii”已經與處理過的C++原始碼檔案

                (4)、 “.h”,標頭檔

                (5)、 “.o”,編譯後的目標檔案,“.a”由目標檔案構成的庫檔案

        4、預先處理又叫先行編譯,它的主要工作簡單的說就是“文本替換”,具體的說就是處理以#開頭的命令,(1)宏展開(2)標頭檔包含(3)處理條件編譯

二、 gcc基本用法(gcc的指令選項有100多,慶幸的是我們常用的只有10多個,這裡只列出開發過程中常用的選項):

    1、gcc 命令的格式: 

         
gcc [options][filenames] ,

         
options,編譯選項,

         
filename,要編譯的檔案名稱,

         (ps.[]表示選項可以沒有)

   
2、options,指令選項:

          (1)-o output_filename, 指定編譯後產生的可執行檔的檔案名稱為:output_filename,若不指定,系統預設值為:a.out

          (2)-c,告訴編譯器只完成編譯工作不連結成可執行檔,只要產生目標檔案 .o 就可以了,這個命令在應用開發中不常用,主要用在linux 核心編譯工作中。

          (3)-g,告訴編譯器,在產生的檔案中注入調試工具(gnu的gdb)需要的符號資訊,要想對編譯出的程式進行調試,就必須加上這個命令(當然,加上這個命令後產生的檔案會變大).

          (4)最佳化命令:-O,-O2,這兩個命令都是對程式的編譯、連結進行最佳化處理,提升可執行檔的執行效率,當然相應的編譯時間也會增加,-O2隻是-O的一個進階版本。(在簡單的數學運算例子中,最佳化後執行時間會減少3,4倍)

          (5)-Idirname,這裡命令是-I,dirname與I連寫,告訴編譯器,將這裡指定的目錄dirname加入到標頭檔尋找列表中去,(ps.在預先處理階段,對於符號<>,cpp(c pre processor預先處理程式)會根據系統預設設定的標頭檔目錄(/user/include)中尋找,這個選項的作用就是告訴cpp,如果在預設的目錄中找不到標頭檔,就去這裡尋找)

          (6)-Ldirname,將dirname指出的目錄加入到庫檔案的目錄列表中,告訴 ld(串連程式)首先到-L指定的目錄中去尋找庫檔案,然後再到系統預設的目錄中去尋找(/usr/lib)

          (7)-lname,指定連結時需要的函數庫,eg:當我們的原始碼中用到數學函數,就要連結函數庫libm.a 簡寫m,所以我們可以加上選項 -lm,這樣就連結上了數學庫函數

          (8)-staic,採用靜態連結的方式編譯,動態連結通常用 .so 為尾碼,靜態連結用 .o 為尾碼

註:這裡講解下動態連結和動態連結的問題:當採用靜態連結時,連結器會找出所有的庫函數然後把他們的拷貝加入到可執行檔中去(所以,靜態連結產生的檔案會非常的大),靜態連結一旦成功,這個外界的函數庫就不需要了。然而,當採用動態連結時,執行程式只會在程式內做一個標記,指明當程式需要執行時,必須要先將外界的函數庫載入進來,此方式的優點就是會節省空間的,linux下gcc的預設連結方式就是動態連結。

          (9)-Wall , (大寫w),列印出所有警告資訊

             
-w , (小寫w),不列印任何警告資訊

          (10)-Dmacro,-D可以再命令中定義一個宏macro,這個選項相當於在程式添加了了 #define macro

 

 

 

                               

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.