常見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未定義符號:原始碼檔案未被包含或編譯。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.