Unix Linux程式設計 靜態庫和動態庫

2021-08-30 21:36:27 字數 843 閱讀 3693

構建程式的一種方式是簡單地將每乙個原始檔編譯成目標檔案,然後將這些目標檔案鏈結在一起組成乙個可執行程式,如下所示

在很多情況下,源**檔案也可以被多個程式共享。因此要降低工作量的第一步就是將這些源**檔案只編譯一次,然後在需要的時候將它們鏈結進不同的可執行檔案中。雖然這項技術能夠節省編譯時間,但其缺點是在鏈結的時候仍然需要為所有目標檔案命名。此外,大量的目標檔案會散落在系統上的各個目錄中,從而造成目錄中內容的混亂

為解決這個問題,可以將一組目標檔案組織成乙個被稱為物件庫的單元。物件庫分為兩種:靜態的和共享的。共享庫是一種更加現代化的物件庫,它比靜態庫更具優勢。

靜態庫也被稱為歸檔檔案,它是 unix 系統提供的第一種庫。

共享庫是一種將庫函式打包成乙個單元使之能夠在執行時被多個程序共享的技術。這種技術能夠節省磁碟空間和 ram。

將程式與靜態庫鏈結起來時(或沒有使用靜態庫),得到的可執行檔案會包含所有被鏈結程序式的目標檔案的副本。這樣當幾個不同的可執行程式使用了同樣的目標模組時,每個可執行程式會擁有自己的目標模組的副本。這種**的冗餘存在幾個缺點。

共享庫就是設計用來解決這些缺點的。共享庫的關鍵思想是目標模組的單個副本由所有

需要這些模組的程式共享。目標模組不會被複製到鏈結過的可執行檔案中,相反,當第乙個需要共享庫中的模組的程式啟動時,庫的單個副本就會在執行時被載入進記憶體。當後面使用同一共享庫的其他程式啟動時,它們會使用已經被載入進記憶體的庫的副本。使用共享庫意味著可執行程式需要的磁碟空間和虛擬記憶體(在執行的時候)更少了

共享庫還具備下列優勢。

這項新增功能的主要開銷如下所述

Unix Linux下的靜態庫和動態庫

靜態庫 產生庫 寫若干個c檔案 函式或者全域性變數,不應有main 編譯 gcc c 打包成庫 ar r lib a若干個.o 寫乙個.h檔案 函式或者全域性變數的宣告 產生可執行檔案 寫c程式,include庫的標頭檔案,可以使用庫裡面的函式和變數,gcc lib a c程式檔案,或者gcc l ...

UNIX LINUX程式設計書籍

排名不分先後 1.c語言 高質量程式設計指南 c語言介面與實現 c語言解惑 c專家程式設計 c陷阱與缺陷 c語言參考手冊 2.linux應用開發 unix網路程式設計 第1,2卷 unix環境高階程式設計 linux系統程式設計 unix linux程式設計實踐教程 linux程式設計 第3版 un...

Unix Linux程式設計 socketpair

管道內部傳輸的是位元組流,tcp socket傳輸的也是位元組流,區別在於 socket的基礎api中有乙個socketpair函式。它能夠方便的建立雙向管道 include include socketpair 函式用於建立一對無名的 相互連線的套接子。引數 domain必須是unix本地域協議族...