linux程式設計之一:入門

zzz607發表於2010-03-24

1.C語言編譯器

   歷史上,C語言編譯器被稱為cc。在起草POSIX標準時,因為已經不可能制訂出相容所有廠商的標準cc命令了,所以POSIX委員會決定為C語言編譯器建立新的命令,即為c89。只要使用這個命令,在任何機器上,它的編譯選項都是相同的。

 

2.標頭檔案

   對C語言,標頭檔案幾乎總是在/usr/include目錄及其子目錄下面。那些依賴於特定Linux版本的標頭檔案通常可以在目錄/usr/include/sys和/usr/include/linux中找到

   呼叫C編譯器時,可以用 -I 標誌來包含在子目錄或非標準目錄中的include檔案

 

3.庫檔案

   標準系統庫檔案目錄:/lib和/usr/lib,編譯器預設情況下只搜尋標準目錄下的庫檔案。可以編譯時給出完整的庫檔名讓編譯器搜尋指定目錄下的庫檔案,如:

   cc -o fred fred.c /usr/lib/libm.a

也可以寫成如下形式:

   cc -o fred fred.c -lm

 

  庫檔名必須是lib開頭,隨後的部分指明這是什麼庫,如m表示數學庫。字尾 .a 表示這是靜態庫,字尾 .so 表示這是動態庫。

 

  -L 選項指定庫檔案搜尋路徑,注意這裡是路徑,沒有檔名。

 

4.靜態庫

   靜態庫使用使用ar命令來建立,如:ar cvf libfoo.a bill. fred.o

   在某些系統上,還必須為函式庫生成一個內容表,通過使用命令ranlib命令來完成這一步,如:ranlib libfoo.a

 

靜態情況下,他把庫直接載入到程式裡,而在動態連結的時候,他只是保留介面,將動態庫與程式程式碼獨立。這樣就可以提高程式碼的可複用度,和降低程式的耦合度。

另外,執行時,要保證主程式能找到動態庫,所以動態庫一般釋出到系統目錄中,要麼就在跟主程式相對很固定的路徑裡,這樣不管主程式在本機何時何地跑,都能找得到動態庫。而靜態庫只作用於連結時,執行主程式時,靜態庫檔案沒存在意義了

相關文章