常見gcc編譯參數
來源:互聯網
上載者:User
一:編譯過程的4個階段:預先處理,編譯,彙編,連結;
1:最常用的方式
gcc hello.c -o hello
2:預先處理後停止編譯
gcc -E hello.c -o hello.i(.i通常為已經預先處理過的C原始程式)
3:將hello.i編譯為目標代碼,可以使用-c參數來完成
gcc -c hello.i -o hello.o
也可以使用-x參數讓gcc從指定的步驟開始.
4:將產生的目標檔案連結成可執行檔
gcc hello.o -o hello
5:多個源檔案時
gcc f1.c f2.c -o file
二:gcc參數的警告提示功能
1:-pedantic 使用了ANSI/ISO C語言擴充文法的地方將產生相應的警告資訊
2:-Wall 產生儘可能多的警告資訊,建議始終帶上
3:-Werror 將所有的警告當成錯誤進行處理
三:庫依賴
函數庫實際上就是一些標頭檔和庫檔案的集合.
-I選項向gcc的標頭檔搜尋路徑中添加新的目錄
-L選項向gcc的庫檔案搜尋路徑中添加新的目錄
-l指定連結的庫檔案名稱,如 -ldavid 表示指示gcc去串連庫檔案libdavid.so
-static強制使用靜態連結庫
動態庫檔案(.so)和靜態庫檔案(.a)的區別在於程式執行時所需的代碼是運行時動態載入的,還是編譯時間靜態載入的.gcc優先使用動態庫
四:其他
-On 控制最佳化代碼的產生,n是一個代表優先順序別的整數;n取0~3;-O相當於-O1;
-O1 減小代碼的長度和執行時間,一般包括線程跳轉(Thread Jump)和延遲退棧(Deferred Stack Pops);
-O2 在O1基礎上,進行一些額外調整,如處理器指令跳轉;
-O3 在O2基礎上,迴圈展開一些其他和處理器特性相關的最佳化工作;
-pipe:管道,它可以用來同時串連兩個程式,其中一個程式的輸出將直接作為另一個程式的輸入,這樣就可以避免使用臨時檔案,提高編譯速度,但編譯時間消耗更多的記憶體.
-Dmacro 定義指定的宏,使它能夠通過源碼中的#ifdef進行檢驗
-g3 獲得有關偵錯工具的詳細資料
-S 要求編譯器產生來自原始碼的組譯工具輸出
-v 啟動所有警示
-w 禁止所有警示
五:常見錯誤類型
1:syntex error,語法錯誤
2:can't find include file,標頭檔錯誤
3:ld:lm:No such file or directory,找不到所需的函數庫
4:Undefined symbol未定義符號:原始碼檔案未被包含或編譯。