首先了解編譯器在對**編譯的時候有以下的階段
1.預處理(進行巨集替換)
2. 編譯(生成彙編)
3. 彙編(生成機器可識別**,也就是編譯成目標檔案)
4. 連線(生成可執行檔案或庫檔案)
假設我寫了乙個test.c檔案,示例:
第一階段:gcc -e test.c -o test.i
第二階段:gcc -s test.i –o test.s
第三階段:gcc –c test.s –o test.o
第四階段:gcc test.o –o test (鏈結目標檔案,生成可執行檔案test)
或者可以一條命令從.c檔案生成可執行檔案gcc test.c -o test
那麼linux下的編譯器gcc如何完成
格式 :gcc [選項] 要編譯的檔案 [選項] [目標檔案]
接著介紹部分的gcc選項:
gcc選項
選項的作用
-e只做預處理
-s編譯到組合語言,不進行彙編和鏈結
-c編譯到目標**
-o就是生成目標檔案
-g生成除錯資訊
-o0 -o1 -o2 -o3
編譯器的優化選項的4個級別,-o0表示沒有優化,-o3優化級別最高
-w不生成任何警告資訊
-wall
生成所有警告資訊
-static
此選項對生成的檔案採用靜態鏈結
-shared
此選項將盡量使用動態庫,所以生成檔案比較小,但是需要系統由動態庫.
最後稍稍提一哈動靜態庫:
靜態庫是指編譯鏈結時,把庫檔案的**全部加入到可執行檔案中,因此生成的檔案比較大,但在執行時就不依靠庫。如果以後庫出現異常,並不會影響到可執行檔案,靜態庫的字尾名一般為「.a」動態庫與之相反,在編譯鏈結時並沒有把庫檔案的**加入到可執行檔案中,而是在程式執行時由執行時鏈結檔案載入庫,這樣可以節省系統的開銷(大大的節省了空間)。但是,這個動態庫如果出現異常,則使用了動態庫的可執行檔案就會受到影響。動態庫一般字尾名為「.so。gcc 在編譯時預設使用動態庫。
Linux下GCC編譯器的安裝
檢視gcc版本 ubuntu下檢視gcc的版本非常簡單,直接在終端上輸入gcc v 或者 gcc version,就會顯示版本資訊了,而且它配置的編譯指令碼引數也可看到,如下圖所示 cd opt wget 2 解壓 tar xvf gcc 5.3.0.tar.gz 3 建立安裝目錄 mkdir us...
Linux下gcc編譯器和g 編譯器的那些事兒
使用c c 程式設計大約有三四個年頭了。最開始涉及到微控制器 嵌入式linux等,都使用的是c語言,那時主要寫linux驅動,甚至在arm板上寫linux應用程式時需要應用物件導向的思想的時候,都是使用c語言的結構體和函式指標來實現。當然,使用的編譯器自然就是gcc了。後來,慢慢的轉向了使用c 編寫...
Linux編譯器GCC的使用
編譯流程的四個步驟 預處理編譯 彙編鏈結 hello.c 預處理 hello.i 編譯 hello.s 彙編 hello.o 鏈結 hello gcc編譯流程 gcc optio filename option e 可以使編譯器在預處理結束時就停止編譯。o 指的是目標檔案。s 可以使編譯器完成編譯時...