日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

gcc 選項(xiàng)(轉(zhuǎn))

 WUCANADA 2012-06-26

把GCC的編譯信息重定向到一個(gè)文件     gcc -c test.c 2> error.txt

gcc   -o   f   f.c   2   &>   out.info 這樣就所有信息包括錯(cuò)誤信息

gcc是編譯器,負(fù)責(zé)對(duì)c代碼的編譯, ld是連接器 負(fù)責(zé)將多個(gè)*.o的目標(biāo)文件鏈接成elf可執(zhí)行文件。elf可執(zhí)行文件是unix常用的可執(zhí)行文件類型,就像windows的exe文件。elf文件中有很多信息包括段信息還有頭信息,這些信息對(duì)硬件是沒(méi)有意義的,所以有的時(shí)候我們通過(guò)objcopy將elf轉(zhuǎn)化成bin 文件加載到內(nèi)存中運(yùn)行,bin文件就是一個(gè)純二進(jìn)制文件,并且你可以通過(guò)objdump將elf文件來(lái)反匯編。

     gcc選項(xiàng)

總體選項(xiàng) (Overall Option)  
           (C++編譯的步驟: 預(yù)處理 -> 編譯 -> 匯編 -> 連接)                   
           -c(生成.obj )      進(jìn)行 預(yù)處理-編譯-匯編,輸出生產(chǎn)obj機(jī)器代碼文件
           -S(生成匯編)       進(jìn)行 預(yù)處理-編譯,輸出匯編代碼
           -E(預(yù)處理)         只預(yù)處理,不生成文件,但可以重定向到指定文件。
                                                 如: gcc -E hello.c > My.txt   
                
           -o file                   生成指定的文件
           -pipe
           -v                         顯示在編譯過(guò)程的每一步中用到的命令
           -x language      設(shè)定文件所使用的語(yǔ)言,默認(rèn)后綴名 `c'。其它可選如下:
                              'objective-c', 'c-header', 'c++', 'cpp-output',
                                                 'assembler', ' assembler-with-cpp' 等
                   
語(yǔ)言選項(xiàng) (LANGUAGE OPTIONS) 
           -ansi        只支持 ANSI 標(biāo)準(zhǔn)的 C 語(yǔ)法.這一選項(xiàng)將禁止 GNU C 的某些特色 。
                                     如 asm 或 typeof 關(guān)鍵詞.

           -frtti         開啟RTTI的支持(dynamic_cast和typeid需要用到),和vc++不同,
                                     這在gcc中是默認(rèn)選項(xiàng)。使用"-fno-rtti"將其禁用。

           -lstdc++ 開啟對(duì)C++特性支持的編譯,如new,delete 等或者直接使用 g++。 

預(yù)處理器選項(xiàng) (Preprocessor Option) 
            -Aassertion 
            -dD
            -dM
            -dN  
            -E                            只激活預(yù)處理,但不生成文件,可以重定向到指定文件。
            -C                            一般和-E使用, 在預(yù)處理的時(shí)候,不刪除注釋信息,分析程序很方便。
            -H                            頭文件依賴。
            -idirafter   dir 
            -include   file            相當(dāng)于在代碼中使用#include<filename>。
            -imacros  file
            -iprefix     file
            -iwithprefix dir
            -M -MD
            -MM                          輸出一個(gè)make兼容的相關(guān)列表
            -MMD -nostdinc 
            -P 
            -Dmacro[=defn]       相當(dāng)于C語(yǔ)言中的#def        macro defn    //缺省默認(rèn)為 1
            -Umacro                   相當(dāng)于C語(yǔ)言中的#undef   macro
                       
匯編器選項(xiàng) (ASSEMBLER OPTION)    
           -Wa,option 

連接器選項(xiàng) (LINKER OPTION)    
           -llibrary                  指定依賴的庫(kù)名
                    -nostartfiles
           -nostdlib
           -static                    使用靜態(tài)庫(kù)編譯 
           -shared                  使用動(dòng)態(tài)庫(kù)編譯 
           -symbolic
           -Xlinker option
           -Wl,option
           -u symbol

 

目錄選項(xiàng) (DIRECTORY OPTION)       
           -Bprefix
           -Idir -I-  (大寫的i)    指定所需頭文件目錄<include dir> ,
           -Ldir                         指定所需庫(kù)文件目錄<lib           dir>

 

警告選項(xiàng) (WARNING OPTION)   
          -w              不生成警告信息
          -Wall          生成所有警告信息 ,也可以用-W(warning)來(lái)標(biāo)記指定的警告
          -Werror      把所有的警告都視為錯(cuò)誤處理

 

調(diào)試選項(xiàng) (DEBUGGING OPTION)   
             -a -dletters -fpretend-float 
             -g -glevel -gcoff -gxcoff -gxcoff+ -gdwarf -gdwarf+ -gstabs -gstabs+ 
                          指示編譯器,在編譯時(shí)產(chǎn)生調(diào)試信息
             -ggdb -p -pg -save-temps -print-file-name=library -print-libgcc-file-name -print-prog-name=program
                          比-g生成更多的信息,


優(yōu)化選項(xiàng) (OPTIMIZATION OPTION)     :
             -O0不進(jìn)行優(yōu)化處理,-O或-O1優(yōu)化生成代碼 -O2進(jìn)一步優(yōu)化 -O3比-O2更進(jìn)一步優(yōu)化,包括inline函數(shù))

 

目標(biāo)機(jī)選項(xiàng) (TARGET OPTION) 
             -b machine
             -V version

 

機(jī)器相關(guān)選項(xiàng) (MACHINE DEPENDENT OPTION)
             -m486  針對(duì) 486 進(jìn)行代碼優(yōu)化

 

代碼生成選項(xiàng) (CODE GENERATION OPTION)  
             -fpic -fPIC

====================================================================

在編譯的時(shí)候我們需要用到其他的庫(kù),在config時(shí)候可以通過(guò)“-I”來(lái)指定頭文件目錄,
但是每次都需要設(shè)置的話難免有些麻煩,找到一個(gè)簡(jiǎn)單的方法。看下文部分。

有大量的環(huán)境變量可供設(shè)置以影響 GCC 編譯程序的方式。利用這些變量的控制也可使用合適的命令行選項(xiàng)。
一些環(huán)境變量設(shè)置在目錄名列表中。這些名字和 PATH 環(huán)境變量使用的格式相同。
特殊字符 PATH_SEPARATOR (安裝編譯程序的時(shí)候定義)用在目錄名之間。
在 UNIX 系統(tǒng)中,分隔符是冒號(hào),而 Windows 系統(tǒng)中為分號(hào)。

C_INCLUDE_PATH
編譯 C 程序時(shí)使用該環(huán)境變量。該環(huán)境變量指定一個(gè)或多個(gè)目錄名列表,查找頭文件,
就好像在命令行中指定 -isystem 選項(xiàng)一樣。會(huì)首先查找 -isystem 指定的所有目錄。
也見 CPATH 、 CPLUS_INCLUDE_PATH 和 OBJC_INCLUDE_PATH 。

COMPILER_PATH
該環(huán)境變量指定一個(gè)或多個(gè)目錄名列表,如果沒(méi)有指定 GCC_EXEC_PREFIX 定位子程序,
編譯程序會(huì)在此查找它的子程序。也見 LIBRARY_PATH 、 GCC_EXEC_PREFIX 和 -B 命令行選項(xiàng)。
CPATH 編譯 C 、 C++ 和 Objective-C 程序時(shí)使用該環(huán)境變量。該環(huán)境變量指定一個(gè)或多個(gè)目錄名列表,
查找頭文件,就好像在命令行中指定 -l 選項(xiàng)一樣。會(huì)首先查找 -l 指定的所有目錄。
也見 C_INCLUDE_PATH 、 CPLUS_INCLUDE_PATH 和 OBJC_INCLUDE_PATH 。

CPLUS_INCLUDE_PATH
編譯 C++ 程序時(shí)使用該環(huán)境變量。該環(huán)境變量指定一個(gè)或多個(gè)目錄名列表,查找頭文件,
就好像在命令行中指定 -isystem 選項(xiàng)一樣。會(huì)首先查找 -isystem 指定的所有目錄。
也見 CPATH 、 C_INCLUDE_PATH 和 OBJC_INCLUDE_PATH 。

DEPENDENCIES_OUTPUT
為文件名設(shè)置該環(huán)境變量會(huì)讓預(yù)處理程序?qū)⒒谝蕾囮P(guān)系的 makefile 規(guī)則寫入文件。不會(huì)包括系統(tǒng)頭文件名字。
如果環(huán)境變量設(shè)置為單名,被看作是文件名字,而依賴關(guān)系規(guī)則的名字來(lái)自源文件名字。
如果定義中有兩個(gè)名字,則第二個(gè)名字是用作依賴關(guān)系規(guī)則的目標(biāo)名。
設(shè)置該環(huán)境變量的結(jié)果和使用命令行選項(xiàng) -MM 、 -MF 和 -MT 的組合是一樣的。
也見 SUNPRO_DEPENDENCIES 。

GCC_EXEC_PREFIX
如果定義了該環(huán)境變量,它會(huì)作為編譯程序執(zhí)行的所有子程序名字的前綴。例如,
如果將變量設(shè)置為 testver 而不是查找 as ,匯編器首先會(huì)在名字testveras 下查找。
如果在此沒(méi)有找到,編譯程序會(huì)繼續(xù)根據(jù)它的普通名進(jìn)行查找??稍谇熬Y名中使用斜線指出路徑名。
GCC_EXEC_PREFIX 的默認(rèn)設(shè)置為 prefix /lib/gcc-lib/ ,這里的 prefix 是安裝編譯程序時(shí) configure 腳本指定的名字。
該前綴也用于定位標(biāo)準(zhǔn)連接程序文件,包含進(jìn)來(lái)作為可執(zhí)行程序的一部分。如果使用 -B 命令行選項(xiàng),會(huì)重寫該設(shè)置。
也見 COMPILER_PATH 。

LANG
該環(huán)境變量用于指出編譯程序使用的字符集,可創(chuàng)建寬字符文字、串文字和注釋。
定義 LANG 為 C-JIS ,指出預(yù)處理程序?qū)⒍嘧止?jié)字符按照 JIS (日語(yǔ)工業(yè)標(biāo)準(zhǔn))字符進(jìn)行解釋。
 C-SJIS 可用來(lái)指出 Shift -JIS 字符而 C-EUCJP 指出日文 EUC 。如果沒(méi)有定義 LANG ,或定義為不可識(shí)別,
函數(shù) mblen() 被用來(lái)確定字符寬度,而 mbtowc() 用來(lái)將多字節(jié)序列轉(zhuǎn)換為寬字符。

LC_ALL
如果設(shè)置,該環(huán)境變量的值重寫 LC_MESSAGES 和 LC_CTYPE 的所有設(shè)置。
LC_CTYPE 該環(huán)境變量指出引用串中定義的多字節(jié)字符的字符分類。主要用于確定字符串的字符邊界,
字符編碼需要用引號(hào)或轉(zhuǎn)義符,可被錯(cuò)誤地解釋為字符串的結(jié)尾或特殊字符串。對(duì) Australian English ,
可將它設(shè)置為 en_AU ; 對(duì) Mexican Spanish ,可將它設(shè)置為 es_MX。如果沒(méi)有設(shè)置該變量,
默認(rèn)為 LANG 變量的值,或如果沒(méi)有設(shè)置 LANG ,那就使用 C 英語(yǔ)行為。也見 LC_ALL 。

LC_MESSAGES
該環(huán)境變量指出編譯程序使用何種語(yǔ)言發(fā)出診斷消息。對(duì) Australian English ,可設(shè)置為 en_AU ;
對(duì) MexicanSpanish ,可設(shè)置為 es_MX 。如果變量沒(méi)有設(shè)置,使用 LANG 變量的默認(rèn)值,
或如果沒(méi)有設(shè)置 LANG ,那就使用 C英語(yǔ)行為。也見 LC_ALL 。

LD_LIBRARY_PATH
該環(huán)境變量不會(huì)影響編譯程序,但程序運(yùn)行的時(shí)候會(huì)有影響。變量指定一個(gè)目錄列表,
程序會(huì)查找該列表定位共享庫(kù)。只有當(dāng)未在編譯程序的目錄中找到共享庫(kù)的時(shí)候,執(zhí)行程序必須設(shè)置該變量。

LD_RUN_PATH
該環(huán)境變量不會(huì)影響編譯程序,但程序運(yùn)行的時(shí)候會(huì)有影響。該變量在運(yùn)行時(shí)指出文件的名字,
運(yùn)行的程序可由此得到它的符號(hào)名字和地址。地址不會(huì)重新載入,
因而可能符號(hào)引用其他文件中的絕對(duì)地址。這和 ld 工具使用 -R 選項(xiàng)完全一樣。

LIBRARY_PATH
該環(huán)境變量可設(shè)置為一個(gè)或多個(gè)目錄名字列表,連接程序會(huì)搜尋該目錄,以查找特殊連接程序文件,
和由 -l (字母 l )命令行選項(xiàng)指定名字的庫(kù)。由 -L 命令行選項(xiàng)指定的目錄在環(huán)境變量的前面,
首先被查找。也見 COMPILER_PATH 。

OBJC_INCLUDE_PATH
在編譯 Objective-C 程序的時(shí)候使用該環(huán)境變量。一個(gè)或多個(gè)目錄名的列表由環(huán)境變量指定,
用來(lái)查找頭文件,就好像在命令行中指定 -isystem 選項(xiàng)一樣。
所有由 -isystem 選項(xiàng)指定的目錄會(huì)首先被查找。
也見 CPATH 、 CPLUS_INCLUDE_PATH 和 C_INCLUDE_PATH 。

SUNPRO_OUTPUT
為文件名設(shè)置該環(huán)境變量會(huì)令預(yù)處理程序?qū)⒒谝蕾囮P(guān)系的 makefile 規(guī)則寫入文件。會(huì)包含系統(tǒng)頭文件名。
如果環(huán)境變量被設(shè)置為單個(gè)名字,它將會(huì)被當(dāng)作文件名,依賴關(guān)系規(guī)則中的名字將由源文件的名字中獲得。
如果定義中有兩個(gè)名字,第二個(gè)名字就是依賴關(guān)系規(guī)則中的目標(biāo)名。設(shè)置該環(huán)境變量的結(jié)果與在命令行中
使用參數(shù) -M 、 -MF 和 -MT 的效果一樣。參見 DEPENDENCIES_OUTPUT 。

TMPDIR
這個(gè)變量包含了供編譯程序存放臨時(shí)工作文件的目錄的路徑名。這些文件通常在編譯過(guò)程結(jié)束時(shí)被刪除。
這種文件的一個(gè)例子就是由預(yù)處理程序輸出并輸入給編譯程序的文件。



 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多