生活随笔
收集整理的這篇文章主要介紹了
GCC使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
GCC的選項如何指定GCC的默認頭 文件路徑Linux系統的頭文件 和庫文件搜索路徑
頭文件庫文件運行時動態庫的搜索路徑 GCC的選項 -c 只生成目標文件(.o),不連接。 % gcc -c main.c
% g++ -c reciprocal.cpp
-I 可以指定頭文件的目錄 % g++ -c -I ../include reciprocal.cpp
-D 設置宏定義 % g++ -c -D NDEBUG reciprocal.cpp
% g++ -c -D NDEBUG=3 reciprocal.cpp
-O 優化級別,默認優化級別是2 % g++ -c -O2 reciprocal.cpp
-o 連接程序,生成可執行 如何指定GCC的默認頭文件路徑 有大量的環境變量可供設置以影響 GCC 編譯程序的方式。利用這些變量 的控制也可使用合適的命令行選項。一些環境變量設置在目錄名列表中。 這些名字和 PATH 環境變量使用的格式相同。特殊字符 PATH_SEPARATOR (安裝編譯程序的時候定義)用在目錄名之間。在 UNIX 系統中,分隔符是冒號,而 Windows 系統中為分號。
C_INCLUDE_PATH 編譯 C 程序時使用該環境變量。該環境變量指定 一個或多個目錄名列表,查找頭文件,就好像在命令行中指定?-isystem ?選項一樣。會首先查找 -isystem 指定的所有目錄。也見 CPATH 、 CPLUS_INCLUDE_PATH 和 OBJC_INCLUDE_PATH 。 COMPILER_PATH 該環境變量指定一個或多個目錄名列表,如果沒有 指定 GCC_EXEC_PREFIX 定位子程序,編譯程序會在此查找它的子程 序。也見 LIBRARY_PATH 、 GCC_EXEC_PREFIX 和 -B 命令行選項。 CPATH 編譯 C 、 C++ 和 Objective-C 程序時使用該環境變量。該 環境變量指定一個或多個目錄名列表,查找頭文件,就好像在命令行 中指定 -l 選項一樣。會首先查找 -l 指定的所有目錄。也見 C_INCLUDE_PATH 、 CPLUS_INCLUDE_PATH 和 OBJC_INCLUDE_PATH CPLUS_INCLUDE_PATH 編譯 C++ 程序時使用該環境變量。該環境變 量指定一個或多個目錄名列表,查找頭文件,就好像在命令行中指定 isystem 選項一樣。會首先查找 -isystem 指定的所有目錄。也見 CPATH 、 C_INCLUDE_PATH 和 OBJC_INCLUDE_PATH 。 DEPENDENCIES_OUTPUT 為文件名設置該環境變量會讓預處理程序將 基于依賴關系的 makefile 規則寫入文件。不會包括系統頭文件名字。 如果環境變量設置為單名,被看作是文件名字,而依賴關系規則的名 字來自源文件名字。如果定義中有兩個名字,則第二個名字是用作依 賴關系規則的目標名。設置該環境變量的結果和使用命令行選項 MM 、 -MF 和 -MT 的組合是一樣的。也見 SUNPRO_DEPENDENCIES GCC_EXEC_PREFIX 如果定義了該環境變量,它會作為編譯程序執行的 所有子程序名字的前綴。例如,如果將變量設置為 testver 而不是查 找 as ,匯編器首先會在名字testveras 下查找。如果在此沒有找 到,編譯程序會繼續根據它的普通名進行查找??稍谇熬Y名中使用斜 線指出路徑名。 GCC_EXEC_PREFIX 的默認設置為 prefix /lib/gcc-lib/ ,這里的 prefix 是安裝編譯程序時 configure 腳本指定的名字。該前綴也用 于定位標準連接程序文件,包含進來作為可執行程序的一部分。如果 使用 -B 命令行選項,會重寫該設置。也見 COMPILER_PATH 。 LANG 該環境變量用于指出編譯程序使用的字符集,可創建寬字符文 字、串文字和注釋。定義 LANG 為 C-JIS ,指出預處理程序將多字 節字符按照 JIS (日語工業標準)字符進行解釋。 C-SJIS 可用來 指出 Shift -JIS 字符而 C-EUCJP 指出日文 EUC 。如果沒有定義 LANG ,或定義為不可識別,函數 mblen() 被用來確定字符寬度,而 mbtowc() 用來將多字節序列轉換為寬字符。 LC_ALL 如果設置,該環境變量的值重寫 LC_MESSAGES 和 LC_CTYPE 的所有設置。 LC_CTYPE 該環境變量指出引用串中定義的多字節字符的字符分類。 主要用于確定字符串的字符邊界,字符編碼需要用引號或轉義符,可 被錯誤地解釋為字符串的結尾或特殊字符串。對 Australian English ,可將它設置為 en_AU ; 對 Mexican Spanish ,可將它 設置為 es_MX。如果沒有設置該變量,默認為 LANG 變量的值,或如 果沒有設置 LANG ,那就使用 C 英語行為。也見 LC_ALL 。 LC_MESSAGES 該環境變量指出編譯程序使用何種語言發出診斷消息。 對 Australian English ,可設置為 en_AU ;對 MexicanSpanish ,可設置為 es_MX 。如果變量沒有設置,使用 LANG 變量的默認 值,或如果沒有設置 LANG ,那就使用 C英語行為。也見 LC_ALL 。 LD_LIBRARY_PATH 該環境變量不會影響編譯程序,但程序運行的時 候會有影響。變量指定一個目錄列表,程序會查找該列表定位共享庫。 只有當未在編譯程序的目錄中找到共享庫的時候,執行程序必須設置 該變量。 LD_RUN_PATH 該環境變量不會影響編譯程序,但程序運行的時候會 有影響。該變量在運行時指出文件的名字,運行的程序可由此得到它 的符號名字和地址。地址不會重新載入,因而可能符號引用其他文件 中的絕對地址。這和 ld 工具使用 -R 選項完全一樣。 LIBRARY_PATH 該環境變量可設置為一個或多個目錄名字列表,連接 程序會搜尋該目錄,以查找特殊連接程序文件,和由 -l (字母 l )命令行選項指定名字的庫。由 -L 命令行選項指定的目錄在環境變 量的前面,首先被查找。也見 COMPILER_PATH 。 OBJC_INCLUDE_PATH 在編譯 Objective-C 程序的時候使用該環境變 量。一個或多個目錄名的列表由環境變量指定,用來查找頭文件,就 好像在命令行中指定 -isystem 選項一樣。所有由 -isystem 選項指 定的目錄會首先被查找。也見 CPATH 、 CPLUS_INCLUDE_PATH 和 C_INCLUDE_PATH 。 SUNPRO_OUTPUT 為文件名設置該環境變量會令預處理程序將基于依 賴關系的 makefile 規則寫入文件。會包含系統頭文件名。如果環境 變量被設置為單個名字,它將會被當作文件名,依賴關系規則中的名 字將由源文件的名字中獲得。如果定義中有兩個名字,第二個名字就 是依賴關系規則中的目標名。設置該環境變量的結果與在命令行中使 用參數 -M 、 -MF 和 -MT 的效果一樣。參見 DEPENDENCIES_OUTPUT 。 TMPDIR 這個變量包含了供編譯程序存放臨時工作文件的目錄的路徑 名。這些文件通常在編譯過程結束時被刪除。這種文件的一個例子就 是由預處理程序輸出并輸入給編譯程序的文件。 Linux系統的頭文件和庫文件搜索路徑 **#include**的頭文件,連結數據庫,系統定義,總共有下列來源指定gcc去那找。
當初在編譯時指定的(在~gcc/gcc/collect2.c:locatelib() 寫在specs內的(針對rpm包) 后來用-D -I -L指定的 gcc環境變量設定(編譯的時候) ld.so的環境變量(這是run time的時候) 頭文件 gcc 在編譯時如何去尋找所需要的頭文件 :
header file的搜尋會從-I開始 然后找gcc的環境變量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH 再找內定目錄 : /usr/include /usr/local/include /usr/lib/gcc-lib/i386-linux/2.95.2/include /usr/lib/gcc-lib/i386-linux/2.95.2/../../../../include/g++-3 /usr/lib/gcc-lib/i386-linux/2.95.2/../../../../i386-linux/include 庫文件但是如果裝gcc的時候,是有給定的prefix的話,那么就是 /usr/include prefix/include prefix/xxx-xxx-xxx-gnulibc/include prefix/lib/gcc-lib/xxxx-xxx-xxx-gnulibc/2.8.1/include 庫文件 cos()等函式庫的選項要多加 -lm
編譯的時候:gcc會去找-L 再找gcc的環境變量LIBRARY_PATH 再找內定目錄 /lib /usr/lib /usr/local/lib 這是當初compile gcc時寫在程序內的 運行時動態庫的搜索路徑 1 在配置文件/etc/ld.so.conf中指定動態庫搜索路徑
2 通過環境變量LD_LIBRARY_PATH指定動態庫搜索路徑(當通過該環境 變量指定多個動態庫搜索路徑時,路徑之間用冒號":"分隔)
3 在編譯目標代碼時指定該程序的動態庫搜索路徑(還可以在編譯目 標代碼時指定程序的動態庫搜索路徑。這是通過gcc 的參數 "-Wl,-rpath,"指定。當指定多個動態庫搜索路徑時,路徑之間用冒 號":"分隔)
4 默認的動態庫搜索路徑/lib
5 默認的動態庫搜索路徑/usr/lib
動態庫的搜索路徑搜索的先后順序是:
1 編譯目標代碼時指定的動態庫搜索路徑;
2 環境變量LD_LIBRARY_PATH指定的動態庫搜索路徑;
3 配置文件/etc/ld.so.conf中指定的動態庫搜索路徑;
4 默認的動態庫搜索路徑/lib;
5 默認的動態庫搜索路徑/usr/lib。
參考 1?http://www.cublog.cn/u/28781/showart_401631.html
2?http://tech.ccidnet.com/art/302/20080219/1365287_1.html
《新程序員》:云原生和全面數字化實踐 50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔 為你收集整理的GCC使用 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。