iOS靜態庫和動態庫

2021-10-22 09:45:16 字數 2189 閱讀 9471

ios 開發中的『庫』(一)

ios 開發中的『庫』(二)

ios 利用 framework 進行動態更新

ios裡的動態庫和靜態庫

ios區分靜態庫和動態庫

連線乙個庫(動態庫 或 靜態庫)

比如libfoo.a,linker的方式會把這個靜態庫複製到你最終輸出的二進位制檔案裡面去,你不需要在執行時解決任何依賴關係的問題。

比如.dylib或者系統的framework(framework跟動態庫很像,只不過還包含一些資源檔案)。

執行程式時,會認為這個庫是預設就在系統裡或者你工程的某個位置的,用到的庫會在執行時載入進來。

這樣做的好處是,比如載入的是系統的framework,那麼大家的程式在打包生成二進位制時都不需要包含這個framework,因為這個framework是系統提供的。

同樣,自己程式包含的動態庫,當你的程式有一些相關的擴充套件程式時,也可以直接使用動態庫,而不需要把動態庫包含到擴充套件程式的bundle裡面。

這樣,在執行時,就會尋找你的程式的bundle,找到這個庫並載入進來。

那還區分 link 和 embed 幹啥,直接全部用 embed 不就完了嗎?

build settings -> mach-o type

前面提到過,靜態庫一般是.a檔案,動態庫一般是.framework檔案。為什麼說一般,因為靜態庫也可能沒有字尾;.framework檔案其實只是個資料夾,真正的二進位制檔案在.framework裡面。.framework裡面的二進位制檔案也可能是靜態庫,也有可能是動態庫。有字尾也可能沒有字尾。因此有時候不通過工具很難區分。所以這裡推薦一款mach-o格式檔案瀏覽器:machoview。

在使用cocoapods的時候在podfile裡加入use_frameworks! ,那麼你在編譯的時候就會預設幫你生成動態庫,我們能看到每個原始碼pod都會在pods工程下面生成乙個對應的動態庫framework的target,我們能在這個target的build settings -> mach-o type看到預設設定是dynamic library。也就是會生成乙個動態framework,我們能在products下面看到每乙個pod對應生成的動態庫。

lipo -info ***x.framework/***x或/***x.a

檢視資訊,支援的cpu架構列表

lipo -create ***x ***x -output ***x

整合成fat檔案

lipo ***x -thin cpu(armv7/arm64等) -output ***x

提取特定的cpu架構的thin檔案

lipo -remove cpu(armv7/arm64等) ***x -output ***x

移除掉特定的cpu架構的檔案

c02s2jbdfvh5:~ admin$ cd /users/downloads/ocftfacedetect/ocftfacedetect_products/ocftfacedetect.framework 

c02s2jbdfvh5:ocftfacedetect.framework admin$ file ocftfacedetect

ocftfacedetect: mach-o universal binary with 4 architectures: [x86_64:mach-o 64-bit dynamically linked shared library x86_64] [i386] [arm_v7] [arm64]

ocftfacedetect (for architecture x86_64): mach-o 64-bit dynamically linked shared library x86_64

ocftfacedetect (for architecture i386): mach-o dynamically linked shared library i386

ocftfacedetect (for architecture armv7): mach-o dynamically linked shared library arm_v7

ocftfacedetect (for architecture arm64): mach-o 64-bit dynamically linked shared library arm64

iOS靜態庫和動態庫

一 什麼是庫?庫是共享程式 的方式,一般分為靜態庫和動態庫。二 靜態庫與動態庫的區別?靜態庫 鏈結時完整地拷貝至可執行檔案中,被多次使用就有多份冗餘拷貝。動態庫 鏈結時不複製,程式執行時由系統動態載入到記憶體,供程式呼叫,系統只載入一次,多個程式共用,節省記憶體。三 ios裡靜態庫形式?a和.fra...

IOS 靜態庫 和 動態庫

庫從本質上市一中可執行的二進位制格式,可以被載入記憶體中執行 ios 中的靜態庫有 a 和 framework 兩種形式 動態庫有 dylib 和 framework 兩種,後來 dylib 被蘋果換成 tbd 的形式 靜態庫 和 動態庫 區別 靜態庫和動態庫是相對於編譯期和執行期的,靜態庫在編譯期...

iOS 動態庫和靜態庫

一 簡介 靜態庫和動態庫的存在形式 1.靜態庫 a 和 framework 2.動態庫 dylib tdb 和 framework 複製 靜態庫和動態庫在使用上的區別 了解裝置的架構 iphone4s ipnone5 i386 iphone5s iphone7 plus x86 64 真機 ipho...