gcc基本編譯命令

2021-06-09 04:40:44 字數 1773 閱讀 3818

本文**:

1. gcc  -o  hello  hello.c

gcc  hello.c  -o  hello

2. 標頭檔案:

標頭檔案提供對常量的定義和對系統及庫函式呼叫的宣告,對c程式來說,標準標頭檔案位置一般為/usr/include及其子目錄,如果標頭檔案不在編譯器自動搜尋的目錄裡,則可用-i標誌指定,例如:

gcc   -i/usr/openwin/include fred.c

3. 庫檔案

庫是一組預先編譯好的函式的集合,標準系統庫檔案一般儲存在/lib和/usr/lib目錄中,預設情況下鏈結程式只搜尋標準c語言庫, 庫檔案的名字總是以lib開頭, 隨後的部分指名這是什麼庫,檔名的最後部分以.開始, 然後給出庫檔案的型別:

.a: 靜態庫, 類似於windows中的.lib檔案

.so: 共享庫, 類似於windows中的.dll檔案

可通過以下三種方式顯示指定鏈結庫位置:

(1)gcc  -o  fred  fred.c  /usr/lib/libm.a

(2)gcc  -o  fred  fred.c  -lm 會優先鏈結標準庫目錄中名為libm.so的函式庫

(3)gcc  -o  x11fred  -l/usr/openwin/lib  x11fred.c   -lx11  增加/usr/openwin/lib為庫搜尋路徑

4. 建立靜態庫

步聚:(1)編寫原始檔, 如bill.c fred.c

(2)-c編譯為目標檔案, 例gcc -c bill.c fred.c

(3)為庫檔案建立標頭檔案, 最好把頭檔案包鄰含進原始檔中, 有助於編譯器發現錯誤

(4)用ar程式建立乙個歸檔檔案並將目標檔案新增進去

ar  crv  libfoo.a  bill.o  fred.o

(5)對於非gnu的軟體開發工具, 還要為庫函式生成乙個內容表

ranlib libfoo.a

5. nm命令可察看目標檔案, 函式庫, 可執行檔案裡包含的函式

6. gcc能編譯鏈結c程式, gcc能編譯c++源程式, 但不能自動的c++程式使用的庫鏈結, 所以常使用g++來編譯鏈結c++程式

7.警告

-w: 全面警告

-w: 關閉警告

-wall: 常規警告資訊

8.優化

-o0  : 預設不優化(若要生成除錯資訊,最好不優化)

-o1  : 簡單優化,不進行速度和空間的權衡優化; 

-o2  : 進一步的優化,包括了排程。(若要優化,該選項最適合,他是gnu發布軟體的預設優化級別;

-o3  : 雞肋,興許使程式速度更慢;

-funroll-loops  : 展開迴圈,會使可執行文件增大,而速度是否增加取決於特定環境;

-os  : 生成最小執行文件;

一般來說,除錯時不優化,一般的優化選項用-o2(gcc允許-g和-o2聯用,這也是gnu軟體包發布的預設選項),embedded能夠考慮-os。

測試優化效果, time命令

time測量指定程式的執行時間,結果由三部分組成:

real : 程序總的執行時間, 他和系統負載有關(包括了程序排程,轉換的時間)

user: 被測量程序中使用者指令的執行時間

sys  : 被測量程序中核心代使用者指令執行的時間

user和sys的和被稱為cpu時間.

9.編譯預處理及生成彙編**

gcc -e hello.c  在控制台顯示預處理後結果

gcc -s hello.c 生成hello.s的彙編原始檔

10.除錯選項-g

gcc編譯命令

一 gcc的編譯過程分為四個過程 1.預處理 也稱預編譯,preprocessing 生成.i的檔案 2.編譯 compilation 將預處理後的檔案轉換成組合語言,生成.s檔案 3.彙編 assembly 彙編變為目標 機器 生成.o的檔案 4.鏈結 linking 連線目標 生成可執行程式 二...

gcc編譯命令

命令 gcc main.cpp 命令 gcc main.cpp o demo 命令 gcc e main.cpp o main.i 作用 將main.cpp預處理輸出main.i檔案。命令 gcc s main.i 作用 將預處理輸出檔案main.i彙編成main.s檔案。命令 gcc c main...

GCC 編譯命令

gcc命令提供了非常多的命令選項,但並不是所有都要熟悉,初學時掌握幾個常用的就可以了,到後面再慢慢學習其它選項,免得因選項太多而打擊了學習的信心。一.常用編譯命令選項 假設源程式檔名為test.c。1.無選項編譯鏈結 用法 gcc test.c 作用 將test.c預處理 彙編 編譯並鏈結形成可執行...