1. 程式人生 > >linux 下gcc的使用

linux 下gcc的使用

 首先使用gcc要在linux環境下,我們可以使用真正的linux系統(不過這麼做可能有一些麻煩)或者使用一些windows下的虛擬軟體,可以使用虛擬機器搭建的linux環境,這樣可以很方便的進行linux開發。可以下載安裝一個虛擬機器軟體,方法很簡單和安裝普通軟體一樣。(g++就是c++的使用)

在Linux系統中,可執行檔案沒有統一的字尾,系統從檔案的屬性來區分可執行檔案和不可執行檔案。而gcc則通過後綴來區別輸入檔案的類別,下面介紹gcc所遵循的部分約定規則。



.c為字尾的檔案,C語言原始碼檔案;
.a為字尾的檔案,是由目標檔案構成的庫檔案;
.C,.cc或.cxx 為字尾的檔案,是C++原始碼檔案;
.h為字尾的檔案,是程式所包含的標頭檔案;
.i 為字尾的檔案,是已經預處理過的C原始碼檔案;
.m為字尾的檔案,是Objective-C原始碼檔案;
.o為字尾的檔案,是編譯後的目標檔案;
.s為字尾的檔案,是組合語言原始碼檔案;
.S為字尾的檔案,是經過預編譯的組合語言原始碼檔案

一. 常用編譯命令選項
假設源程式檔名為test.c。


1. 無選項編譯連結
用法:gcc test.c
作用:將test.c預處理、彙編、編譯並連結形成可執行檔案。這裡未指定輸出檔案,預設輸出為a.out。


2. 選項 -o
用法:gcc test.c -o test
作用:將test.c預處理、彙編、編譯並連結形成可執行檔案test。-o選項用來指定輸出檔案的檔名。


3. 選項 -E
用法:gcc -E test.c -o test.i
作用:將test.c預處理輸出test.i檔案。


4. 選項 -S
用法:gcc -S test.i 
作用:將預處理輸出檔案test.i彙編成test.s檔案。

5. 選項 -c
用法:gcc -c test.s
作用:將彙編輸出檔案test.s編譯輸出test.o檔案。


6. 無選項鍊接
用法:gcc test.o -o test
作用:將編譯輸出檔案test.o連結成最終可執行檔案test。


7. 選項-O
用法:gcc -O1 test.c -o test

作用:使用編譯優化級別1編譯程式。級別為1~3,級別越大優化效果越好,但編譯時間越長。

二. 多原始檔的編譯方法


如果有多個原始檔,基本上有兩種編譯方法:
[假設有兩個原始檔為test.c和testfun.c]


1. 多個檔案一起編譯
用法:gcc testfun.c test.c -o test
作用:將testfun.c和test.c分別編譯後連結成test可執行檔案。


2. 分別編譯各個原始檔,之後對編譯後輸出的目標檔案連結。


用法:
gcc -c testfun.c //將testfun.c編譯成testfun.o
gcc -c test.c //將test.c編譯成test.o
gcc -o testfun.o test.o -o test //將testfun.o和test.o連結成test

以上兩種方法相比較,第一中方法編譯時需要所有檔案重新編譯,而第二種方法可以只重新編譯修改的檔案,未修改的檔案不用重新編譯。

執行程式 例如./a.out就可以執行程式