例如,如果已經(jīng)在/home/fred/include 下保存了自定義的頭文件,那么為了讓gcc能夠找到它們,可按下面的例子使用-I選項:
$gcc
myapp.c -I /home/fred/include -o
myapp
-L選項對庫文件起的作用和-I選項告訴gcc把DIRNAME添加到庫文件搜索路徑里,要保證DIRNAME比標(biāo)準(zhǔn)位置先被搜索.
假設(shè)讀者需要測試一個新的編程庫libnew.so,當(dāng)前它保存在/home/fred/lib下(.so是共享庫文件的標(biāo)準(zhǔn)擴(kuò)展名).為了鏈接庫文件,gcc命令行應(yīng)與下面類似:
$gcc
myapp.c -L/home/fred/lib -lnew -o
myapp
-L/home/fred/lib結(jié)構(gòu)讓gcc先在/home/fred/lib下查找?guī)煳募?然后再到默認(rèn)的庫文件搜索路徑下進(jìn)行查找.-l選項使得鏈
接程序使用指定的函數(shù)庫中的目標(biāo)代碼,也就是本例中的libnew.so.把函數(shù)庫命名為lib{名字}是UNIX的約定,與許多其他編譯器一樣,gcc
也遵循此約定.如果忘了使用-l選項,則與庫的鏈接將失敗,并且gcc產(chǎn)生錯誤,說明程序中引用了未定義的函數(shù)名.
默認(rèn)情況下,gcc使用共享庫進(jìn)行鏈接,所以在需要鏈接靜態(tài)庫時必須使用-static選項來保證只使用靜態(tài)庫.
$gcc
cursesapp.c -lncurses -static -o
cursesapp
在鏈接靜態(tài)庫時,可執(zhí)行程序的大小比鏈接共享庫要達(dá)很多.使用共享庫時,程序所使用的代碼是在運(yùn)行時動態(tài)鏈接,而不是在編譯時靜態(tài)鏈接,因此,如果所需要的共享庫沒有在用戶系統(tǒng)中安裝,運(yùn)行就會失敗.