創建靜態庫

一、靜態庫和動態庫的區別:

靜態庫和動態庫是相對編譯期和運行期的,靜態庫以 .a 和 .framework 形式存在,鏈接時,靜態庫會被完整地復制到可執行文件中,被多次使用就有多份冗余拷貝;

動態庫以 .dylib 和 .framework 形式存在,鏈接時不復制,程序運行時由系統動態加載到內存,供程序調用,系統只加載一次,多個程序共用,節省內存,一般只能由系統創建。

靜態庫和動態庫的存在形式

靜態庫: .a 和 .framework

動態庫: .dylib 和 .framework

注:項目中如果使用了自制的動態庫,不能被上傳到 AppStore

靜態庫分為真機—Debug(調試)版本、真機—Release(發布)版本、模擬器—Debug版本、模擬器—Release版本;開發中一般都打包Release(發布)版本,將真機和模擬器版本合并,提供外界。

二、創建靜態庫

1、新建項目,點擊iOS—Framework&Library—Cocoa Touch Static Library。

系統自動生成以工程名命名的.h和.m文件,可自定義的在目錄下添加或刪除文件。

注意目錄下Products文件夾有一個.a文件為紅色,說明文件并不存在。

這里我們將系統生成的.h和.m文件刪除。

2、點擊Build Phases—Copy Files,左下角點擊+號按鈕,添加你需要暴露的接口頭文件。

如果你在靜態庫工程中使用了category,那么你可能會碰到鏈接問題,解決的辦法就是需要同時在生成靜態 ? ? ? ? ?庫的工程和使用靜態庫的工程中使用“-all_load”編譯選項,即在對應target的"Build Settings"中的“Other Linker Flags”選項添加“-all_load”。

注意:使用靜態庫的工程中是一定要加該編譯選項的!至于生成靜態庫的工程中加不加沒有試過,不過建議還是加上該編譯選項。

3、點擊Build Phases左上角的+號按鈕,選擇New Headers Phase?選擇需要暴露出來的 .h 文件

4、查看Build Active architecture only 都改為NO

Yes表示只編譯選中模擬器設備對應的架構,

No則為編譯所有模擬器設備支持的cup架構

(Debug版本同理)

5、分別在模擬器和真機下Command+B編譯一下,Products文件夾下的.a文件變為黑色,表示創建成功,否則失敗

6、選中Products文件夾下的.a文件,右擊 “Show In Finder” ,查看制作好的 .a 文件

Debug-iphoneos 文件夾里面的東西是用在真機上的

Debug-iphonesimulator 文件夾里面的東西是用在模擬器上的

如果 Scheme 是 Release 模式,生成的文件夾就以 Release 開頭

7、.a 文件能同時用在真機和模擬器上,需要進行合并

在終端輸入指令: lipo -create ?模擬器.a文件的路徑 ?真機.a文件的路徑 ?-output ?合并后的保存路徑(.a)

例如:lipo -create /Users/xxxx/Library/Developer/Xcode/DerivedData/StaticLib/Build/Products/Release-iphoneos/libxxx.a ? ?/Users/xxxx/Library/Developer/Xcode/DerivedData/StaticLib/Build/Products/Release-iphonesimulator/libxxx.a ?-output /Users/shelin/Desktop/StaticLib.a

8、使用:只需將.a和暴露出來的.h頭文件導入工程目錄下就可供外界使用。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 一、靜態庫和動態庫的區別: 靜態庫和動態庫是相對編譯期和運行期的,靜態庫以 .a 和 .framework 形式存...
    Shelin閱讀 10,675評論 24 29
  • 靜態庫與動態庫的區別 首先來看什么是庫,庫(Library)說白了就是一段編譯好的二進制代碼,加上頭文件就可以供別...
    吃瓜群眾呀閱讀 12,074評論 3 42
  • 一、簡單介紹 1.1. 什么是庫1.2. 庫的分類1.3. 靜態庫和動態庫 二、創建靜態庫 2.1. 創建.a 靜...
    C丶丶H閱讀 710評論 1 1
  • 一、靜態庫和動態庫的區別 靜態庫和動態庫是相對編譯期和運行期的,在存在形式上,靜態庫是以 .a 和 .framew...
    CMD獨白閱讀 269評論 0 3
  • 雨是一種讓人充滿浪漫但又讓人討厭的事物,看雨對于現代都市人來說實在是一件奢侈之事。不知從哪一天起,我...
    沛沛沛沛沛沛閱讀 362評論 0 1