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