xcode 打包靜態庫

  1. 靜態庫工程創建ios

    打開xcode --> 新建工程  --> 選擇工程類型爲library  --> 肯定
xcode

    

  2.工程配置  架構

     點擊工程中-->ios device(選擇edit scheme) --> 點擊info  --> run (選擇release 或者debug)--> ok
iphone

    target --> building setting --> archciture  active only  設置爲no
ui

    編譯運行--> xcode 的product 中點擊菜單--> show in finder 找到編譯的靜態庫。
spa


  3. 注意事項.net

    靜態庫通常分爲模擬器和真機兩種 
debug

    模擬器是i386架構,真機是你當前打包時候使用的手機的架構
code

    iPhone 手機cpu 架構類型
orm

    armv6 :iphone iphone2 iphone3G

    armv7 :iphone3Gs  iphone4   iphone4s 

    armv7s :iphone5 iphone5c

    arm64 :iphone5s iphone6 iphone6p iphone6s iphone6sp

    4.查看lib庫的信息    

    命令是:lipo -info libPrint.a,能夠看到顯示的結果是:Arch是  Arm7。下面我會具體介紹一下。

    5.有時候能夠看到undefine symbols for architecture i386這樣的錯誤

其實這個錯誤緣由很簡單,就是由於,咱們用錯了編譯出來的xxx.a lib;在模擬器裏面,咱們須要的是基於i386構架編譯的static lib,可是這個a文件,你們還記得前面說的arm6 arm7構架的麼。這個a實際上是在iphone這個arm構架上運行的代碼。其實show in finder指向的是一個ios device的庫,並非i386模擬器下的庫。那如何編譯i386的庫呢?咱們將這個iOS Device修改爲iPhone5.0 Simulator。在進行編譯,這樣就能夠編譯出i386下面的庫。這個時候咱們show in finder打開的文件夾仍是ios device下的庫。咱們最好本身去那個目錄下看一下。這裏咱們用command去查看了一下目錄狀況,以下:能夠看到一個iphoneos的目錄和一個simulator的目錄。

而後咱們再看看這個目錄與第4條所示的目錄有什麼不一樣! 一樣也有一個libPrint.a文件。

6.lib 錯誤緣由,

Release-iphoneos裏面的是基於arm6 arm7編譯出來的庫文件。Release-iphonesimulator文件夾下面的是基於i386編譯出來的文件。

7.合併.a文件,製做通用靜態庫

這二個庫一個是用於真機運行的一個是用於模擬器運行的.其實咱們能夠利用lipo將這二個文件打包成一個通用的a文件。命令以下:

/Users/user/Library/Developer/Xcode/DerivedData/UITab-dgfkluumuexoxhcapzidtsmdgqcj/Build/Products替換成你的路徑。 

/Users/user/Desktop/xxx.a替換成合並後的路徑。 

lipo -create path1/真機/xxxt.a  path2/模擬器/xxx.a  -output /Users/pjk1129/Desktop/xxx.a


連接:http://blog.csdn.net/kepoon/article/details/21516977

相關文章
相關標籤/搜索