基礎(chǔ)知識(shí)回歸總結(jié)整理GNU編譯工具GCC支持多種編程語(yǔ)言支持多種平臺(tái)構(gòu)建Build過(guò)程查看版本文件后綴編譯單個(gè)源程序編譯多個(gè)源程序預(yù)處理指令頭文件的三種定位方式
~~~~~~~~~~~~~~~
C、C++、Objective-C、java、Fortran、Pascal、Ada
~~~~~~~~~~~
Unix、linux、Windows。
~~~~~~~~~~~~~~
編輯 -> 預(yù)編譯 -> 編譯 -> 匯編 -> 鏈接
1) 編輯: vi hello.c -> hello.c 2) 預(yù)編譯:gcc -E hello.c -o hello.i -> hello.i -+ 3) 編譯: gcc -S hello.i -> hello.s | GCC 4) 匯編: gcc -c hello.s -> hello.o | 工具鏈 5) 鏈接: gcc hello.o -o hello -> hello -+
范例:hello.c
~~~~~~~
gcc -v
~~~~~~~
.h - C語(yǔ)言源代碼頭文件 .c - 預(yù)處理前的C語(yǔ)言源代碼文件 .i - 預(yù)處理后的C語(yǔ)言源代碼文件 .s - 匯編語(yǔ)言文件 .o - 目標(biāo)文件 .a - 靜態(tài)庫(kù)文件 .so - 共享庫(kù)(動(dòng)態(tài)庫(kù))文件
~~~~~~~~~~~~~
gcc [選項(xiàng)參數(shù)] 文件
-c - 只編譯不鏈接。 -o - 指定輸出文件。 -E - 預(yù)編譯。 -S - 產(chǎn)生匯編文件。 -pedantic - 對(duì)不符合ANSI/ISO C語(yǔ)言標(biāo)準(zhǔn)的 擴(kuò)展語(yǔ)法產(chǎn)生警告。 -Wall - 產(chǎn)生盡可能多的警告。 范例:gcc -Wall wall.c -Werror - 將警告作為錯(cuò)誤處理。 范例:gcc -Werror werror.c -x - 指定源代碼的語(yǔ)言。 范例:gcc -x c++ cpp.c -lstdc++ -g - 生成調(diào)試信息。 -O1/O2/O3 - 優(yōu)化等級(jí)。
~~~~~~~~~~~~~
gcc [選項(xiàng)參數(shù)] 文件1 文件2 …
思考:頭文件的作用是什么?
1) 聲明外部變量、函數(shù)和類。 2) 定義宏、類型別名和自定義類型。 3) 包含其它頭文件。 4) 借助頭文件衛(wèi)士,防止因同一個(gè)頭文件被多次包含, 而引發(fā)重定義錯(cuò)。
包含頭文件時(shí)需要注意:
1) gcc的-I選項(xiàng)
指定頭文件附加搜索路徑。
2) #include <…>
先找-I指定的目錄,再找系統(tǒng)目錄。
3) #include “…”
先找-I指定的目錄,再找當(dāng)前目錄,最后找系統(tǒng)目錄。
4) 頭文件的系統(tǒng)目錄
/usr/include /usr/local/include /usr/lib/gcc/i686-linux-gnu/4.6.3/include /usr/include/c++/4.6.3 (C++編譯器優(yōu)先查找此目錄)
~~~~~~~~~
C_INCLUDE_PATH - C頭文件的附加搜索路徑, 相當(dāng)于gcc的-I選項(xiàng)。 CPATH - 同C_INCLUDE_PATH。 CPLUS_INCLUDE_PATH - C++頭文件的附加搜索路徑。 LIBRARY_PATH - 鏈接時(shí)查找靜態(tài)庫(kù)/共享庫(kù)的路徑。 LD_LIBRARY_PATH - 運(yùn)行時(shí)查找共享庫(kù)的路徑。
通過(guò)gcc的-I選項(xiàng)指定C/C++頭文件的附加搜索路徑:
# gcc calc.c cpath.c -I.將當(dāng)前目錄作為C頭文件附加搜索路徑, 添加到CPATH環(huán)境變量中:
# export CPATH=$CPATH:. // export保證當(dāng)前shell的 // 子進(jìn)程繼承此環(huán)境變量# echo $CPATH# env | grep CPATH也可以在~/.bashrc或~/.bash_profile 配置文件中寫環(huán)境變量,持久有效:
export CPATH=$CPATH:.執(zhí)行# source ~/.bashrc或# source ~/.bash_profile生效。以后每次登錄自動(dòng)生效。1) #include “目錄/xxx.h” - 頭文件路徑發(fā)生變化, 需要修改源程序。 2) C_INCLUDE_PATH/CPATH=目錄 - 同時(shí)構(gòu)建多個(gè)工程, 可能引發(fā)沖突。 3) gcc -I目錄 - 既不用改程序, 也不會(huì)有沖突。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注