Linux gcc編譯常用編譯命令
謝凡凡 2010-10-28 於西安高新區冉科公司
gcc命令格式:gcc [options][filename]
-x language 指定使用的語言(c,c++或彙編)
-c 只對文件進行編譯和彙編,生成.o目標文件,但不進行鏈接操作
-S 只對文件進行編譯,但不彙編和鏈接,生成彙編文件.s
-E 只對文件進行預處理,但不編譯彙編和鏈接,
-o [file1] file2 將文件file2編譯成可執行文件file1
-L library 指定所使用的庫文件的路徑
-I directory 爲include文件的路徑
-w 禁止警告信息
-pedantic 嚴格要求符合ansi標準
-Wall 顯示警告信息
-g 插入調試信息,便於調試
-p 產生prof所需的信息
-pg 產生grpof所使用信息
-O(O1) 對編譯出的代碼進行優化
-O2 比-O高一級的優化
-O3 產生更高級別的優化
-v 顯示gcc版本
-m*** 根據不同的微處理器進行優化
gcc優化代碼:-O1,-O2,-O3
優點:代碼優化,程序運行更快
缺點:
-
優化級別越高,編譯時間越長(提示:開發時不要優化,最終發行時,才進行優化)
-
優化級別越高,越消耗內存
-
使用優化選項,調試不方便
高級gcc選項:
管理大型項目最好用make
-
指定查找路徑
Eg:包含zw.h,在路徑/usr/include/zw
gcc –Wall –I/usr/include/zw –o test test.c
指定鏈接庫,給出鏈接庫的路徑,並告訴鏈接庫的名字:
gcc –L/usr/x11/lib –Wall –o test test.c –lx11
-
鏈接庫
程序中鏈接庫,使用-l選項,鏈接庫可以是靜態的,也可以是動態的。
鏈接數學庫
gcc –o test test.c –lm
-
使用管道
管道實現的是使管道前的輸出成爲管道後的輸入(一個程序的輸出作爲另外一個程序的輸入)
gcc -pipe –o testtest.c
gcc編譯流程:
-
C預處理器cpp
C預處理器cpp用來完成宏的求值、條件編譯以及其它在編譯前完成的工作。可以完成:解釋宏,處理包含文件,處理#if和#ifdef等。通常gcc自動調用cpp,也可以通過gcc –E調用。
-
gun連接器ld
連接器將許多獨立的模塊組合成爲一個可執行文件,gcc自動調用ld,也可以手動調用ld,更好控制連接過程。
-
GUN彙編器as
Gcc編譯產生彙編代碼,as處理彙編代碼,得到目標文件二進制文件),最終生成可執行文件。通常情況下gcc調用。
4、文件處理器ar
可以使用ar程序建立靜態庫,把幾個小文件組合成一個大文件。建立靜態庫時,必須把多個.o文件組合成一個單獨的.a文件。
5、庫顯示ldd
查看一個可執行程序使用的共享庫。
Eg:ldd ./test