Xcode 編譯靜態庫


  有時候,我們需要將一部分經常用到的代碼提取出來用來復用,或者說需要用到c++的代碼的時候,可以通過編譯成靜態庫的方式來使用。本文中使用的Xcode版本是8.3,靜態庫制作過程和其他版本基本一樣,可能出現的內容有所差別,但並不影響制作。

  1.創建一個靜態庫工程。

  選擇iOS->Cocoa Touch Static Library,如下圖所示。

  創建完成后,工程中會出現兩個文件.h和.m,文件名是你的工程名,將.h中的所有內容刪除,將.m文件刪除,如下圖:

  2.導入依賴庫和需要編譯的文件。

  導入你的工程需要的依賴庫,這個不用我說吧。在TARGETS->Build Phases->Link Binary中添加所需要的庫即可。導入文件也不說了,記得勾選copy和group,直接在工程中創建也行啊。如下圖是我導入的兩個文件。

  在ThirdLib.h中添加你需要提供給外部的接口的頭文件,然后在TARGETS->Build Phases中添加Headers,先點擊一下空白處,然后在navigation上找到Editor,如下圖。

  將需要暴露給外部的文件拖入相應的欄目下面,public、private、project,根據情況選擇。我這里只想把ThirdLib.h暴露出來,所以只將ThirdLib.h拖入public中,如果想將某個類的接口細節,暴露也可以拖到public下面。如下圖。

  還有另一種方法也可以,點擊你需要暴露的文件,在Xcode的右邊有個membership的選項,可以修改屬性。

  3.其他配置

  找到target->build settings 搜索public,用如下圖的方式替換。這樣做,會在你編譯之后出現一個叫include的文件夾在你的靜態庫中,里面包含了你暴露給外界的信息。

  到這一步,已經完成了一大半工作。接下來只需改幾個地方即可進行編譯。這幾個地方的修改不必須的(不會對靜態庫造成太大的影響):

  Dead Code Stripping設置為NO,Strip Style設置為Non-Global Symbols,都是在target->build setting中找到並修改。一切都配置完后,選擇build設備,如果選擇模擬器,則會編譯成只支持模擬器的靜態庫;如果選擇真機,則會編譯成只支持真機的靜態庫。先不管這些,將兩種都生成出來,放在桌面兩個不同的文件夾中,一個支持真機靜態庫,一個支持模擬器靜態庫。右鍵工程中product文件夾中的.a文件,show in finder。如下圖是我編譯出的兩個靜態庫。

  然后在終端查看這兩個靜態庫的信息,先進入文件夾,用命令,lipo -info libThirdLib.a查看,如下圖。

  可以看到,它們支持的系統框架不同,模擬器是x86_64,真機是arm64,只能支持單一的目標肯定是不行的啊,不可能一直更換靜態庫吧。既然如此,我們需要把這兩個靜態庫合並成一個。

  首先,將這兩個庫放在桌面兩個不同的文件夾中,不這樣也可以,主要是為了找絕對路徑方便。然后使用命令 lipo -create 模擬器靜態庫的絕對路徑 真機靜態庫的絕對路徑 -output 靜態庫絕對路徑。如下圖。

  這樣,在general中就會存在一個靜態庫thirdLib.a真機和模擬器都支持。

  到這里,靜態庫制作就完成了,很簡單的過程,希望能幫到需要的小伙伴。下一篇,會講framework,因為本人也不是很清楚,研究懂了之后會發表出來。再見~


免責聲明!

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



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