一、庫的概念
庫是程序的一種形式,相對於可執行程序而言。目前主要分爲靜態庫與動態庫。
靜態庫在程序編譯時會被連接到目標代碼中,程序運行時將不再需要該靜態庫。
動態庫在程序編譯時並不會被連接到目標代碼中,而是在程序運行是才被載入,因此在程序運行時還需要動態庫存在
二、庫在各操作系統中表現形式
整個計算機世界,目前分爲Windows與Linux/Unix兩個部分。
1、Windows:靜態庫爲.lib,動態庫爲.dll。
2、Linux/Unix:靜態庫爲.a,動態庫爲.so。
對於基於Linux/Unix的Android與IOS而言:
1、Android:既可以採用靜態庫(.a),也可以採用動態庫(.so),但是距離應用層程序員比較遠,因爲都被封裝爲JNI格式。
2、IOS:是所有系統中最複雜一種,下面詳細闡述。
三、IOS中靜態庫與動態庫。
1、IOS靜態庫:.a與.framework。
2、IOS動態庫:.dylib與.framework。3、IOS的.framework是動態庫,我們自己的.framework是靜態庫;IOS不允許用戶自定義使用動態庫,而只允許開發者使用靜態庫。
4、我們自己開發的時候只有靜態庫,就是隻有.a與.framework。
5、a與.framework的區別:
.a是一個純二進制文件,.framework中除了有二進制文件之外還有資源文件。
.a文件不能直接使用,至少要有.h文件配合,.framework文件可以直接使用。
.a + .h + sourceFile = .framework。
建議用.framework.
前者開發.Framework,後者開發.a。
6、a與.framework的相同之處
1)都是對源代碼的封裝,核心都是.a靜態庫。
2)打包時候,都要設置平臺,在真機、模擬器通用狀況下,都要將os與simulator兩個文件夾的編譯結果合併。.Framework合併的是靜態庫部分,合併完後再替換原來任意一個Framework文件夾的靜態庫即可。