1. gzyueqian
      13352868059
      首頁 > 新聞中心 > > 正文

      Linux系統(tǒng)平臺下關(guān)于GCC編譯及使用的方法

      更新時間: 2008-04-28 14:59:00來源: 粵嵌教育瀏覽量:647

        編譯:

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

        gcc -E hello.c -o hello.i

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

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

        gcc -c hello.i -o hello.o

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

        gcc -c hello.c

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

        gcc hello.o -o hello

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

        gcc -o hello hello.c

        警告:

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

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

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

        庫依賴:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        加速:

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

        -pipe 加速編譯

        gcc -pipe foo.c -o foo

        GCC常用選項

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

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

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

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

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

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

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

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

        -v 啟動所有警報;

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

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

        -w 禁止所有的報警。

      免費預(yù)約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 日本免费爽视频 | 亚洲日韩欧美国产高清αv 亚洲欧美高清在线观 | 最新永久免费在线视频 | 欧美日韩另类国产一区二区三区 | 亚洲国产综合网址 | 亚洲成a人v欧美综合在线 |