C++靜態函式庫和動態函式庫的關係

高洛峰
發布: 2016-10-12 15:09:16
原創
1881 人瀏覽過

C++靜態函式庫和動態函式庫的關係

什麼是函式庫?

函式庫是寫好的現有的,成熟的,可以重複使用的程式碼。現實中每個程式都要依賴許多基礎的底層函式庫,不可能每個人的程式碼都從零開始,因此函式庫的存在意義非同尋常。

所謂靜態、動態是指連結。回顧一下,將一個程式編譯成可執行程式的步驟:

C++靜態函式庫和動態函式庫的關係

靜態函式庫:

之所以成為【靜態函式庫】,是因為在連結階段,會將彙編產生的目標檔案.o與引用到的庫一起連結打包到可執行檔中。因此對應的連結方式稱為靜態連結。

 

試想一下,靜態庫與彙編生成的目標文件一起鏈接為可執行文件,那麼靜態庫必定跟.o文件格式相似。其實一個靜態函式庫可以簡單看成是一組目標檔(.o/.obj檔)的集合,也就是很多目標檔經過壓縮打包後形成的一個檔。靜態函式庫特點總結:

1、靜態函式庫對函式庫的連結是放在編譯時期完成的。

2、程式在運行時與函數庫再無瓜葛,移植方便。

3、浪費空間和資源,因為所有相關的目標檔案與牽涉到的函數庫被連結合成一個可執行檔。

 

 

 

透過上面的介紹發現靜態函式庫,容易使用和理解,也達到了程式碼重複使用的目的,那為什麼還需要動態函式庫呢?

 

為什麼還要動態函式庫?

 

為什麼需要動態函式庫,其實也是靜態函式庫的特色導致。

 

1、空間浪費是靜態庫的一個問題。

C++靜態函式庫和動態函式庫的關係

2、另一個問題是靜態庫對程式的更新、部署和發布頁會帶來麻煩。如果靜態函式庫liba.lib更新了,所以使用它的應用程式都需要重新編譯、發佈給使用者(對於玩家來說,可能是一個很小的改動,卻導致整個程式重新下載,全量更新)。

動態函式庫在程式編譯時並不會被連接到目標程式碼中,而是在程式執行是才被載入。不同的應用程式如果呼叫相同的函式庫,那麼在記憶體裡只需要有一份該共享庫的實例,規避了空間浪費問題。動態函式庫在程式運行是才被載入,也解決了靜態函式庫對程式的更新、部署和發佈頁會帶來麻煩。使用者只需要更新動態庫即可,增量更新。

C++靜態函式庫和動態函式庫的關係

動態函式庫特點總結:

1、動態函式庫把一些函式庫函數的連結載入延後到程式運作的時期。

2、可以實現進程之間的資源共享。 (因此動態庫也稱為共享庫)

3、將一些程式升級變得簡單。

4、甚至可以真正做到連結載入完全由程式設計師在程式碼中控制(顯示呼叫)。


來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門推薦
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!