• <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>

            關(guān)于Linux操作系統(tǒng)下GCC的使用方法說明

            編譯:

            第一步、是進(jìn)行預(yù)編譯,使用-E參數(shù)可以讓GCC在預(yù)處理結(jié)束后停止編譯過程:

            gcc -E hello.c -o hello.i

            預(yù)處理的宏定義插入到hello.i中

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

            gcc -c hello.i -o hello.o

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

            gcc -c hello.c

            第三步、是將生成的目標(biāo)文件鏈接成可執(zhí)行文件:

            gcc hello.o -o hello

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

            gcc -o hello hello.c

            警告:

            1、-pedantic 選項(xiàng),那么使用了擴(kuò)展語法的地方將產(chǎn)生相應(yīng)的警告信息

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

            3、-Werror,它要求GCC將所有的警告當(dāng)成錯誤進(jìn)行處理

            庫依賴:

            1、Linux下的大多數(shù)函數(shù)都默認(rèn):

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

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

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

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

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

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

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

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

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

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

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

            -static選項(xiàng),強(qiáng)制使用靜態(tài)鏈接庫

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

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

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

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

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

            選項(xiàng)-O2告訴GCC除了完成所有-O1級別的優(yōu)化之外,同時還要進(jìn)行一些額外的調(diào)整工作,如處理器指令調(diào)度等。

            選項(xiàng)-O3則除了完成所有-O2級別的優(yōu)化之外,還包括循環(huán)展開和其它一些與處理器特性相關(guān)的優(yōu)化工作。

            通常來說,數(shù)字越大優(yōu)化的等級越高,同時也就意味著程序的運(yùn)行速度越快。

            許多Linux程序員都喜歡使用-O2選項(xiàng),因?yàn)樗趦?yōu)化長度、編譯時間和代碼大小之間,取得了一個比較理想的平衡點(diǎn)。

            time ./test 查看程序執(zhí)行時間

            優(yōu)化雖然能夠給程序帶來更好的執(zhí)行性能,但在如下一些場合中應(yīng)該避免優(yōu)化代碼:

            程序開發(fā)的時候優(yōu)化等級越高,消耗在編譯上的時間就越長,因此在開發(fā)的時候最好不要使用優(yōu)化選項(xiàng),只有到軟件發(fā)行或開發(fā)結(jié)束的時候,才考慮對最終生成的代碼進(jìn)行優(yōu)化。

            資源受限的時候一些優(yōu)化選項(xiàng)會增加可執(zhí)行代碼的體積,如果程序在運(yùn)行時能夠申請到的內(nèi)存資源非常緊張(如一些實(shí)時嵌入式設(shè)備),那就不要對代碼進(jìn)行優(yōu)化,因?yàn)橛蛇@帶來的負(fù)面影響可能會產(chǎn)生非常嚴(yán)重的后果。

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

            加速:

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

            -pipe 加速編譯

            gcc -pipe foo.c -o foo

            GCC常用選項(xiàng)

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

            -Dmacro 定義指定的宏,使它能夠通過源碼中的#ifdef進(jìn)行檢驗(yàn);

            -E 不經(jīng)過編譯預(yù)處理程序的輸出而輸送至標(biāo)準(zhǔn)輸出;

            -g3 獲得有關(guān)調(diào)試程序的詳細(xì)信息,它不能與-o選項(xiàng)聯(lián)合使用;

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

            -llibrary 提示鏈接程序在創(chuàng)建最終可執(zhí)行文件時包含指定的庫;

            -O、-O2、-O3 將優(yōu)化狀態(tài)打開,該選項(xiàng)不能與-g選項(xiàng)聯(lián)合使用;

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

            -v 啟動所有警報;

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

            -Werror 在發(fā)生警報時取消編譯操作,即把報警當(dāng)作是錯誤;

            -w 禁止所有的報警

            posted on 2009-07-12 16:12 wrh 閱讀(302) 評論(0)  編輯 收藏 引用


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            導(dǎo)航

            <2011年8月>
            31123456
            78910111213
            14151617181920
            21222324252627
            28293031123
            45678910

            統(tǒng)計(jì)

            常用鏈接

            留言簿(19)

            隨筆檔案

            文章檔案

            收藏夾

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            久久99久久无码毛片一区二区| 国产Av激情久久无码天堂| 91久久精品无码一区二区毛片| 久久国产乱子精品免费女| 国产成人无码精品久久久免费| 久久国产成人午夜aⅴ影院| 久久久国产视频| 久久久九九有精品国产| 久久丫忘忧草产品| 精品久久人人做人人爽综合| 久久精品日日躁夜夜躁欧美| 丁香五月综合久久激情| 97久久婷婷五月综合色d啪蜜芽| 久久综合狠狠综合久久激情 | 77777亚洲午夜久久多喷| 国内精品久久久久影院网站| 97久久精品午夜一区二区| 久久亚洲精品无码VA大香大香| 国产亚洲美女精品久久久| 99re久久精品国产首页2020| 亚洲中文字幕久久精品无码APP | 亚洲欧美日韩精品久久| 人妻无码αv中文字幕久久| 亚洲国产成人久久综合区| 18岁日韩内射颜射午夜久久成人 | 久久ZYZ资源站无码中文动漫| 久久夜色精品国产www| 99久久精品免费观看国产| 国产精品久久久久久久久| 久久水蜜桃亚洲av无码精品麻豆| 无码任你躁久久久久久老妇App| 久久亚洲国产成人影院网站| 久久久久国色AV免费看图片| 国产精品99久久久久久猫咪| 久久―日本道色综合久久| 91精品国产高清久久久久久io| 久久人爽人人爽人人片AV| 人妻无码中文久久久久专区| 亚洲av日韩精品久久久久久a| 亚洲AV无码久久精品蜜桃| 亚洲精品乱码久久久久久蜜桃不卡|