gcc -o f f.c 2 &> out.info 這樣就所有信息包括錯誤信息
gcc是編譯器,負責對c代碼的編譯, ld是連接器 負責將多個*.o的目標文件鏈接成elf可執(zhí)行文件。elf可執(zhí)行文件是unix常用的可執(zhí)行文件類型,就像windows的exe文件。elf文件中有很多信息包括段信息還有頭信息,這些信息對硬件是沒有意義的,所以有的時候我們通過objcopy將elf轉化成bin 文件加載到內存中運行,bin文件就是一個純二進制文件,并且你可以通過objdump將elf文件來反匯編。
gcc選項
總體選項 (Overall Option) (C++編譯的步驟: 預處理 -> 編譯 -> 匯編 -> 連接) -c(生成.obj ) 進行 預處理-編譯-匯編,輸出生產obj機器代碼文件 -S(生成匯編) 進行 預處理-編譯,輸出匯編代碼 -E(預處理) 只預處理,不生成文件,但可以重定向到指定文件。 如: gcc -E hello.c > My.txt -o file 生成指定的文件 -pipe -v 顯示在編譯過程的每一步中用到的命令 -x language 設定文件所使用的語言,默認后綴名 `c'。其它可選如下: 'objective-c', 'c-header', 'c++', 'cpp-output', 'assembler', ' assembler-with-cpp' 等 語言選項 (LANGUAGE OPTIONS) -ansi 只支持 ANSI 標準的 C 語法.這一選項將禁止 GNU C 的某些特色 。 如 asm 或 typeof 關鍵詞.
-frtti 開啟RTTI的支持(dynamic_cast和typeid需要用到),和vc++不同, 這在gcc中是默認選項。使用"-fno-rtti"將其禁用。
-lstdc++ 開啟對C++特性支持的編譯,如new,delete 等或者直接使用 g++。
預處理器選項 (Preprocessor Option) -Aassertion -dD -dM -dN -E 只激活預處理,但不生成文件,可以重定向到指定文件。 -C 一般和-E使用, 在預處理的時候,不刪除注釋信息,分析程序很方便。 -H 頭文件依賴。 -idirafter dir -include file 相當于在代碼中使用#include<filename>。 -imacros file -iprefix file -iwithprefix dir -M -MD -MM 輸出一個make兼容的相關列表 -MMD -nostdinc -P -Dmacro[=defn] 相當于C語言中的#def macro defn //缺省默認為 1 -Umacro 相當于C語言中的#undef macro 匯編器選項 (ASSEMBLER OPTION) -Wa,option
連接器選項 (LINKER OPTION) -llibrary 指定依賴的庫名 -nostartfiles -nostdlib -static 使用靜態(tài)庫編譯 -shared 使用動態(tài)庫編譯 -symbolic -Xlinker option -Wl,option -u symbol
目錄選項 (DIRECTORY OPTION) -Bprefix -Idir -I- (大寫的i) 指定所需頭文件目錄<include dir> , -Ldir 指定所需庫文件目錄<lib dir>
警告選項 (WARNING OPTION) -w 不生成警告信息 -Wall 生成所有警告信息 ,也可以用-W(warning)來標記指定的警告 -Werror 把所有的警告都視為錯誤處理
調試選項 (DEBUGGING OPTION) -a -dletters -fpretend-float -g -glevel -gcoff -gxcoff -gxcoff+ -gdwarf -gdwarf+ -gstabs -gstabs+ 指示編譯器,在編譯時產生調試信息 -ggdb -p -pg -save-temps -print-file-name=library -print-libgcc-file-name -print-prog-name=program 比-g生成更多的信息,
優(yōu)化選項 (OPTIMIZATION OPTION) : -O0不進行優(yōu)化處理,-O或-O1優(yōu)化生成代碼 -O2進一步優(yōu)化 -O3比-O2更進一步優(yōu)化,包括inline函數)
目標機選項 (TARGET OPTION) -b machine -V version
機器相關選項 (MACHINE DEPENDENT OPTION) -m486 針對 486 進行代碼優(yōu)化
代碼生成選項 (CODE GENERATION OPTION) -fpic -fPIC
====================================================================
在編譯的時候我們需要用到其他的庫,在config時候可以通過“-I”來指定頭文件目錄, 但是每次都需要設置的話難免有些麻煩,找到一個簡單的方法??聪挛牟糠?。
有大量的環(huán)境變量可供設置以影響 GCC 編譯程序的方式。利用這些變量的控制也可使用合適的命令行選項。 一些環(huán)境變量設置在目錄名列表中。這些名字和 PATH 環(huán)境變量使用的格式相同。 特殊字符 PATH_SEPARATOR (安裝編譯程序的時候定義)用在目錄名之間。 在 UNIX 系統中,分隔符是冒號,而 Windows 系統中為分號。
C_INCLUDE_PATH 編譯 C 程序時使用該環(huán)境變量。該環(huán)境變量指定一個或多個目錄名列表,查找頭文件, 就好像在命令行中指定 -isystem 選項一樣。會首先查找 -isystem 指定的所有目錄。 也見 CPATH 、 CPLUS_INCLUDE_PATH 和 OBJC_INCLUDE_PATH 。
COMPILER_PATH 該環(huán)境變量指定一個或多個目錄名列表,如果沒有指定 GCC_EXEC_PREFIX 定位子程序, 編譯程序會在此查找它的子程序。也見 LIBRARY_PATH 、 GCC_EXEC_PREFIX 和 -B 命令行選項。 CPATH 編譯 C 、 C++ 和 Objective-C 程序時使用該環(huán)境變量。該環(huán)境變量指定一個或多個目錄名列表, 查找頭文件,就好像在命令行中指定 -l 選項一樣。會首先查找 -l 指定的所有目錄。 也見 C_INCLUDE_PATH 、 CPLUS_INCLUDE_PATH 和 OBJC_INCLUDE_PATH 。
CPLUS_INCLUDE_PATH 編譯 C++ 程序時使用該環(huán)境變量。該環(huán)境變量指定一個或多個目錄名列表,查找頭文件, 就好像在命令行中指定 -isystem 選項一樣。會首先查找 -isystem 指定的所有目錄。 也見 CPATH 、 C_INCLUDE_PATH 和 OBJC_INCLUDE_PATH 。
DEPENDENCIES_OUTPUT 為文件名設置該環(huán)境變量會讓預處理程序將基于依賴關系的 makefile 規(guī)則寫入文件。不會包括系統頭文件名字。 如果環(huán)境變量設置為單名,被看作是文件名字,而依賴關系規(guī)則的名字來自源文件名字。 如果定義中有兩個名字,則第二個名字是用作依賴關系規(guī)則的目標名。 設置該環(huán)境變量的結果和使用命令行選項 -MM 、 -MF 和 -MT 的組合是一樣的。 也見 SUNPRO_DEPENDENCIES 。
GCC_EXEC_PREFIX 如果定義了該環(huán)境變量,它會作為編譯程序執(zhí)行的所有子程序名字的前綴。例如, 如果將變量設置為 testver 而不是查找 as ,匯編器首先會在名字testveras 下查找。 如果在此沒有找到,編譯程序會繼續(xù)根據它的普通名進行查找??稍谇熬Y名中使用斜線指出路徑名。 GCC_EXEC_PREFIX 的默認設置為 prefix /lib/gcc-lib/ ,這里的 prefix 是安裝編譯程序時 configure 腳本指定的名字。 該前綴也用于定位標準連接程序文件,包含進來作為可執(zhí)行程序的一部分。如果使用 -B 命令行選項,會重寫該設置。 也見 COMPILER_PATH 。
LANG 該環(huán)境變量用于指出編譯程序使用的字符集,可創(chuàng)建寬字符文字、串文字和注釋。 定義 LANG 為 C-JIS ,指出預處理程序將多字節(jié)字符按照 JIS (日語工業(yè)標準)字符進行解釋。 C-SJIS 可用來指出 Shift -JIS 字符而 C-EUCJP 指出日文 EUC 。如果沒有定義 LANG ,或定義為不可識別, 函數 mblen() 被用來確定字符寬度,而 mbtowc() 用來將多字節(jié)序列轉換為寬字符。
LC_ALL 如果設置,該環(huán)境變量的值重寫 LC_MESSAGES 和 LC_CTYPE 的所有設置。 LC_CTYPE 該環(huán)境變量指出引用串中定義的多字節(jié)字符的字符分類。主要用于確定字符串的字符邊界, 字符編碼需要用引號或轉義符,可被錯誤地解釋為字符串的結尾或特殊字符串。對 Australian English , 可將它設置為 en_AU ; 對 Mexican Spanish ,可將它設置為 es_MX。如果沒有設置該變量, 默認為 LANG 變量的值,或如果沒有設置 LANG ,那就使用 C 英語行為。也見 LC_ALL 。
LC_MESSAGES 該環(huán)境變量指出編譯程序使用何種語言發(fā)出診斷消息。對 Australian English ,可設置為 en_AU ; 對 MexicanSpanish ,可設置為 es_MX 。如果變量沒有設置,使用 LANG 變量的默認值, 或如果沒有設置 LANG ,那就使用 C英語行為。也見 LC_ALL 。
LD_LIBRARY_PATH 該環(huán)境變量不會影響編譯程序,但程序運行的時候會有影響。變量指定一個目錄列表, 程序會查找該列表定位共享庫。只有當未在編譯程序的目錄中找到共享庫的時候,執(zhí)行程序必須設置該變量。
LD_RUN_PATH 該環(huán)境變量不會影響編譯程序,但程序運行的時候會有影響。該變量在運行時指出文件的名字, 運行的程序可由此得到它的符號名字和地址。地址不會重新載入, 因而可能符號引用其他文件中的絕對地址。這和 ld 工具使用 -R 選項完全一樣。
LIBRARY_PATH 該環(huán)境變量可設置為一個或多個目錄名字列表,連接程序會搜尋該目錄,以查找特殊連接程序文件, 和由 -l (字母 l )命令行選項指定名字的庫。由 -L 命令行選項指定的目錄在環(huán)境變量的前面, 首先被查找。也見 COMPILER_PATH 。
OBJC_INCLUDE_PATH 在編譯 Objective-C 程序的時候使用該環(huán)境變量。一個或多個目錄名的列表由環(huán)境變量指定, 用來查找頭文件,就好像在命令行中指定 -isystem 選項一樣。 所有由 -isystem 選項指定的目錄會首先被查找。 也見 CPATH 、 CPLUS_INCLUDE_PATH 和 C_INCLUDE_PATH 。
SUNPRO_OUTPUT 為文件名設置該環(huán)境變量會令預處理程序將基于依賴關系的 makefile 規(guī)則寫入文件。會包含系統頭文件名。 如果環(huán)境變量被設置為單個名字,它將會被當作文件名,依賴關系規(guī)則中的名字將由源文件的名字中獲得。 如果定義中有兩個名字,第二個名字就是依賴關系規(guī)則中的目標名。設置該環(huán)境變量的結果與在命令行中 使用參數 -M 、 -MF 和 -MT 的效果一樣。參見 DEPENDENCIES_OUTPUT 。
TMPDIR 這個變量包含了供編譯程序存放臨時工作文件的目錄的路徑名。這些文件通常在編譯過程結束時被刪除。 這種文件的一個例子就是由預處理程序輸出并輸入給編譯程序的文件。
|