linux學習筆記五:gcc程式編譯
linux下的gcc(gnu c compiler)是由gnu推出的功能十分強大的平台編譯器,它可在多種硬體平台上編譯出可執行程式,對於gcc的學習與掌握非常必要,因為gcc將會伴隨我們整個的linux學習及開發過程。gcc可以降c,c++及匯程式設計序編譯鏈結成可執行的檔案。需要注意的是在linux中可執行檔案沒有統一的字尾,系統是從檔案的屬性來區分的,這一點跟window下是大不一樣的。
那麼gcc的原始檔是否可以不管檔案的字尾呢?答案是否定的,gcc是要通過字尾來區別輸入檔案的類別的,如:.c, .a(由目標檔案構成的庫檔案),.c, .cc , .cxx(是c++源**檔案),.h(標頭檔案),.i(已經預處理過的c源**檔案), .ii(已預處理過的c++源**檔案),.o(編譯後的目標檔案),.s(彙編源**檔案),.s(經過預彙編的彙編原始檔);
gcc的編譯過程可以分為四個階段,即:預處理,編譯,彙編,鏈結。
www.2cto.com
下面看乙個簡單的例子:
gcc常用編譯選項:
1. -o(小o) 指定編譯後的可執行檔名,預設為 ***.out
2. -c 只編譯,不會進行連線的.o檔案,不可執行
3. -g 編譯出可除錯的程式,即如果我們需要對程式進行除錯,則編譯時必須帶-g ,此時生成的檔案將會大很多
4. - o 及-o2 對編譯鏈結過程進行優化
5.-i(大i) 如-i/home/a 指定外加頭檔案目錄 其實也可把自己做的標頭檔案直接放在 /usr/include/下
www.2cto.com
6.-l 指定庫所在路徑,跟-i原理一樣
7. -static 靜態鏈結 , 即把庫整合到程式中合成乙個可執行檔案 ,相比於動態庫,則動態庫只會在執行時動態地呼叫函式庫。靜態鏈結浪費空間,動態鏈結耗時。預設採用動態鏈結,但只要編譯時加上-static選項就會進行靜態鏈結。
8. -wall : 生成所有警告資訊 而 -w 則不生成任何警告資訊
9. -d 相當於#define 進行巨集定義。 如 gcc -dyes hello.c -o hello 這裡定義了乙個名為yes的巨集
作者 stewen_001
linux學習筆記一(gcc)
1 gcc gcc e 預處理 test.c o test.i m32 32位機器 define include gcc s 編譯 s gcc c 彙編 o o檔案 可重定位的目標檔案 鏈結 readelf 檢視elf檔案 h檢視檔案的頭 test.o a列出所有資訊 gcc test.c wall...
Linux 學習筆記 gcc初體驗
大部分內容 用vmware裝了個ubuntu的虛擬機器嗎,前坑未填,又增新坑。在這裡學了一下,基本的目錄結構 目錄管理的生存向命令 vim的基本操作 好了!開始填坑!ctrl alt t 開啟終端 pwd 顯示當前目錄 cd 切換目錄 接下來主要說明gcc的用法 1.單個檔案的編譯 首先通過vim建...
Linux學習筆記五
網路管理 ifconfig 檢視網絡卡資訊 ifconfig up 啟用網絡卡 ifconfig down 停止網絡卡 ifconfig eth0 網路ip 位址 netmask 子網掩碼 設定網絡卡的ip 位址和子網掩碼 ifconfig eth0 0 ip位址 增加一塊虛擬網絡卡為eth0 0 ...