1. 預處理器頭文件包含: gcc默認搜索頭文件位置 gcc -E prog.c -o prog.i cpp prog.c > prog.i 默認搜索頭文件路徑: /usr/include /usr/local/include 當使用#include 預處理指令時, 後面的<>中填寫相對於默認搜索目錄的路徑. 若是使用"", 則默認先搜索當前目錄, 而後 再搜索系統目錄. -I選項用來指定除默認搜索目錄以外的頭文件 搜索路徑. 2. 預處理器定義 簡單定義: #define MACRO_NAME REPLACE 定義"宏函數", 帶參宏: #define MACRO_FUNC(arg1, arg2) REPLACE 3. 條件編譯 #ifdef DEBUG ... #else ... #endif #ifndef XXX ... #else ... #endif #if 1 ... #else ... #endif 注意條件編譯是在編譯期編譯以前處理的, 所以它和C語言的if語句有本質的差異, 它 不在運行時進行條件判斷. gcc選項 -D能夠用來預約義一個宏, ex: gcc -DDEBUG ... 表明預約義DEBUG宏 4. 庫(用size命令查看可執行程序的大小) 1) 靜態庫生成: 靜態庫(static library, archive, 後綴.a): 打包好的.o檔. 打包: ar -crv libxxx.a 1.o 2.o ... 當應用程序使用靜態庫時, 靜態庫和應用程序連接在一塊兒, 應用程序中會保存有 靜態庫的副本. 靜態庫的缺點: 1. 佔用空間 2. 升級不便, 每次升級都要從新連接程序. 2). 共享庫生成 共享庫(shared object, dynamic linked library, 後綴.so): gcc --shared -fPIC -o libxxx.so 1.c 2.c ... 當應用程序使用共享庫時, 連接階段應用程序須要查詢函數是否認義, 但並不將 共享庫的副本保存在應用程序中. 當應用程序開始執 行時, 操做系統會經過保留在應用程序中的相關信息 加載相應的共享庫. 動態庫/共享庫的優勢: 1. 佔用空間少(硬盤佔用少, 內存空間佔用少) 2. 升級方便 缺點: 須要將其放入系統默認動態庫搜索目錄或者配置 /etc/ld.so.conf才能使用, 軟件發佈具備依賴性. 5. gcc 選項: -I: 指定gcc除默認目錄外的頭文件搜索目錄. -L: 指定gcc除默認搜索目錄外的庫文件搜索目錄. gcc默認搜索/lib 和 /usr/lib下的庫文件. -l: 指定連接哪個庫. 例如, 要連接數學庫libm.so 那麼編譯時命令行上指定 -lm 6. 共享庫加載 系統默認到/lib /usr/lib下加載動態庫. 不然須要配置 /etc/ld.so.conf, 加入放置動態庫的 路徑, 並執行ldconfig更新動態庫路徑信息.