• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Linux系統平臺下關于GCC編譯及使用的方法(轉)

            peakflys注:轉自:http://blog.csdn.net/zhenwenxian/article/details/6099314 

            編譯:

            第一步、是進行預編譯,使用-E參數可以讓GCC在預處理結束后停止編譯過程:

            gcc -E hello.c -o hello.i

            預處理的宏定義插入到hello.i中

             

            第二步、是將hello.i編譯為目標代碼,這可以通過使用-c參數來完成:

            gcc -c hello.i -o hello.o

            也可以通過源文件直接生成

            gcc -c hello.c

             

            第三步、是將生成的目標文件鏈接成可執行文件:

            gcc hello.o -o hello

            也可以通過源文件直接生成

            gcc -o hello hello.c

             

            警告:

            1、-pedantic 選項,那么使用了擴展語法的地方將產生相應的警告信息

            2、-Wall 使用它能夠使GCC產生盡可能多的警告信息

            3、-Werror,它要求GCC將所有的警告當成錯誤進行處理

             

            庫依賴:

            1、Linux下的大多數函數都默認:

            頭文件放到/usr/include/目錄下

            而庫文件則放到/usr/lib/目錄下

            2、GCC在編譯時必須有自己的辦法來查找所需要的頭文件和庫文件。

            -I選項可以向GCC的頭文件搜索路徑中添加新的目錄。

            例如,如果在/home/xiaowp/include/目錄下有編譯時所需要的頭文件,為了讓GCC能夠順利地找到它們,就可以使用-I選項:

            gcc -o test test.c -I /home/xiaowp/include

             

            -L選項向GCC的庫文件搜索路徑中添加新的目錄

            例如,如果在/home/xiaowp/lib/目錄下有鏈接時所需要的庫文件libfoo.so,為了讓GCC能夠順利地找到它,可以使用下面的命令

            gcc -o test test.c -L /home/xiaowp/lib -lfoo

             

            值得好好解釋一下的是-l選項,它指示GCC去連接庫文件libfoo.so。

            Linux下的庫文件在命名時有一個約定,那就是應該以lib三個字母開頭,由于所有的庫文件都遵循了同樣的規范,因此在用-l選項指定鏈接的庫文件名時可以省去lib三個字母,也就是說GCC在對-lfoo進行處理時,會自動去鏈接名為libfoo.so的文件。

             

            -static選項,強制使用靜態鏈接庫

            如果在/home/xiaowp/lib/目錄下有鏈接時所需要的庫文件libfoo.so和libfoo.a

            為了讓GCC在鏈接時只用到靜態鏈接庫,可以使用下面的命令:

            gcc -o test test.c -L /home/xiaowp/lib -static -lfoo

             

            選項-O可以告訴GCC同時減小代碼的長度和執行時間,其效果等價于-O1。

            在這一級別上能夠進行的優化類型雖然取決于目標處理器,但一般都會包括線程跳轉(Thread Jump)和延遲退棧(Deferred Stack Pops)兩種優化。

             

            選項-O2告訴GCC除了完成所有-O1級別的優化之外,同時還要進行一些額外的調整工作,如處理器指令調度等。

             

            選項-O3則除了完成所有-O2級別的優化之外,還包括循環展開和其它一些與處理器特性相關的優化工作。

             

            通常來說,數字越大優化的等級越高,同時也就意味著程序的運行速度越快。

             

            許多Linux程序員都喜歡使用-O2選項,因為它在優化長度、編譯時間和代碼大小之間,取得了一個比較理想的平衡點。

             

            time ./test 查看程序執行時間

             

            優化雖然能夠給程序帶來更好的執行性能,但在如下一些場合中應該避免優化代碼:

             

            程序開發的時候優化等級越高,消耗在編譯上的時間就越長,因此在開發的時候最好不要使用優化選項,只有到軟件發行或開發結束的時候,才考慮對最終生成的代碼進行優化。

             

            資源受限的時候一些優化選項會增加可執行代碼的體積,如果程序在運行時能夠申請到的內存資源非常緊張(如一些實時嵌入式設備),那就不要對代碼進行優化,因為由這帶來的負面影響可能會產生非常嚴重的后果。

             

            跟蹤調試的時候在對代碼進行優化的時候,某些代碼可能會被刪除或改寫,或者為了取得更佳的性能而進行重組,從而使跟蹤和調試變得異常困難。

            加速:

            使用管道代替編譯中臨時文件,

            -pipe 加速編譯

            gcc -pipe foo.c -o foo

             

            GCC常用選項

            -c 通知GCC取消鏈接步驟,即編譯源碼并在最后生成目標文件;

             

            -Dmacro 定義指定的宏,使它能夠通過源碼中的#ifdef進行檢驗;

             

            -E 不經過編譯預處理程序的輸出而輸送至標準輸出;

             

            -g3 獲得有關調試程序的詳細信息,它不能與-o選項聯合使用;

             

            -Idirectory 在包含文件搜索路徑的起點處添加指定目錄;

             

            -llibrary 提示鏈接程序在創建最終可執行文件時包含指定的庫;

             

            -O、-O2、-O3 將優化狀態打開,該選項不能與-g選項聯合使用;

             

            -S 要求編譯程序生成來自源代碼的匯編程序輸出;

             

            -v 啟動所有警報;

             

            -Wall 在發生警報時取消編譯操作,即將警報看作是錯誤;

             

            -Werror 在發生警報時取消編譯操作,即把報警當作是錯誤;

             

            -w 禁止所有的報警。

            posted on 2015-03-10 14:47 peakflys 閱讀(78) 評論(0)  編輯 收藏 引用

            <2025年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            導航

            統計

            公告

            人不淡定的時候,就愛表現出來,敲代碼如此,偶爾的靈感亦如此……

            常用鏈接

            留言簿(4)

            隨筆分類

            隨筆檔案

            文章檔案

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            日本精品久久久久久久久免费| 久久亚洲春色中文字幕久久久| 久久亚洲av无码精品浪潮| 亚洲日本va午夜中文字幕久久| 久久久久久精品久久久久| 热99re久久国超精品首页| 亚洲精品综合久久| 精品免费久久久久久久| 久久久久九国产精品| AV狠狠色丁香婷婷综合久久| 久久久受www免费人成| 久久精品人人槡人妻人人玩AV| 99久久国产主播综合精品| 天天爽天天狠久久久综合麻豆| 人人狠狠综合久久亚洲婷婷| 综合久久国产九一剧情麻豆| 久久久久九九精品影院| 国内精品久久国产大陆| 亚洲AV无码1区2区久久| 日韩欧美亚洲综合久久| 久久久久久亚洲精品不卡| 久久免费线看线看| 久久精品国产亚洲麻豆| 精品久久一区二区三区| 99久久99久久久精品齐齐 | 狠狠久久亚洲欧美专区| 久久国产免费直播| 亚洲日本久久久午夜精品| 久久精品国产亚洲7777| 国产精品99久久久久久猫咪| 国产精品一区二区久久| 久久亚洲欧美国产精品| 久久人妻少妇嫩草AV无码专区| 中文字幕无码精品亚洲资源网久久| 国产精品久久久久久久久软件| 亚洲一级Av无码毛片久久精品| 日本精品久久久久影院日本| 色8激情欧美成人久久综合电| 天堂无码久久综合东京热| 亚洲性久久久影院| 亚洲AV无码久久精品蜜桃|