動態庫和靜態庫的區別


做為一個 ios 開發者或多或少的應該計算機的一些知識, mac 系統它是蘋果公司對linux系統進一步優化產生的。

在做項目結束上傳打包的時候出現了問題(我使用的 leadCloud 三方類庫),不讓我上傳 AVOSLeadCloud 這個庫,我就取搜索這個問題是什么原因,原來是靜態庫動態庫的問題(當時我使用的是動態庫)。好吧,不讓我傳,我就去改靜態庫不就好了,改掉以后,上傳成功!

linux中就存在動態庫和靜態庫之別!

好了,言歸正傳,那我們就來了解一下這個動態庫和靜態庫有什么區別呢?

首先我們來看一下不同點

庫從本質上來說是一種可執行代碼的二進制格式,可以被載入內存中執行。庫分靜態庫和動態庫兩種。 

1. 靜態函數庫

    這類庫的名字一般是libxxx.a;利用靜態函數庫編譯成的文件比較大,因為整個函數庫的所有數據都會被整合進目標代碼中,他的優點就顯而易見了,即編譯后的執行程序不需要外部的函數庫支持,因為所有使用的函數都已經被編譯進去了。當然這也會成為他的缺點,因為如果靜態函數庫改變了,那么你的程序必須重新編譯。

總結一句話就是:使用靜態庫編譯后的執行程序是不需要其他函數庫支持的,但是當他改變時,那么你的程序也要改變!

2. 動態函數庫

    這類庫的名字一般是libxxx.so;相對於靜態函數庫,動態函數庫在編譯的時候 並沒有被編譯進目標代碼中,你的程序執行到相關函數時才調用該函數庫里的相應函數,因此動態函數庫所產生的可執行文件比較小。由於函數庫沒有被整合進你的程序,而是程序運行時動態的申請並調用,所以程序的運行環境中必須提供相應的庫。動態函數庫的改變並不影響你的程序,所以動態函數庫的升級比較方便。

一句話總結:你的執行程序用到此函數庫時才會去調用它,但是你要把他引用到你的程序里面才行!

二、相同

都是由*.o目標文件生成

 

作為一個 IOS 開發者了解清楚動態庫與靜態庫是非常有必要的。那么,我們就來看一下他們在 IOS開發中有什么區別呢?

ios 開發中 動態庫 與靜態庫的區別

一個好的 APP 是需要一個團隊共同協作來優化完成的,這樣使用靜態庫的好處就可以顯現出來了

好處:

1,模塊化,分工合作

2,避免少量改動經常導致大量的重復編譯連接

3,也可以重用,注意不是共享使用

當然動態庫使用有也有許多的好處:

1,使用動態庫,可以將最終可執行文件體積縮小

2,使用動態庫,多個應用程序共享內存中得同一份庫文件,節省資源

3,使用動態庫,可以不重新編譯連接可執行程序的前提下,更新動態庫文件達到更新應用程序的目的。

 

所以說看到這里,我們應該明白為什么蘋果公司不予許 IOS開發中使用動態庫了,動態庫其實就是一個共享的類庫,但是我們知道現在的iPhone,iPodTouch,iPad上面的程序都是單進程的,也就是說在同一個時刻只有一個程序在運行,那么你寫一個動態庫干什么用?你要共享給誰呢?

從2可以看出,其實動態庫應該叫共享庫,那么從這個意義上來說,蘋果禁止iOS開發中使用動態庫就可以理解了:

因為在現在的iPhone,iPodTouch,iPad上面程序都是單進程的,也就是某一時刻只有一個進程在運行,那么你寫個共享庫。

 

那么問題由來了,你蘋果為什么要禁止 IOS開發中不能使用動態庫呢?

一,就是我上面說的一點。

二,就是目前蘋果的AppStore不支持模塊更新,無法更新某個單獨文件(除非自己寫一個更新機制:有自己的服務端放置最新動態庫文件)

所以,現在還是使用靜態庫比較好!

 

該文中主要內容取自http://blog.163.com/gene_lu/blog/static/6402542120138181597392/ 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM