本文**:
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預處理 彙編 編譯並鏈結形成可執行...