Xcode 之自己編譯靜態庫

2021-06-23 02:59:24 字數 2437 閱讀 5300

今天介紹下,如何利用xcode,新建乙個靜態庫,以及如何編譯成i386、armv7、armv7s 等平台架構。

開發環境:mac os x 10.9.4 + xcode 5.0.2

一:新建靜態庫

1,開啟xcode,-》create a new xcode project  -》framework & library - > cocoa touch static library,next。

2,填寫 product name , organization name, company identity, 然後next。

3,建立好專案後,目錄結構如下所示:

4,開啟「mycommon.h」檔案,新增乙個靜態方法:+(void)myprint:(nsstring *)text; 

5,  開啟「mycommon.m」檔案,新增方法體:

+(void)myprint:(nsstring *)text

6,儲存,編譯,到此,我們的靜態庫就製作成功了。如下圖所示:

其中,要注意:圖中紅色1處,表示選中 ios device ,此時會生成 armv7、armv7s、arm64 架構的靜態庫;選中任一ios模擬器,則會生成i386架構下的靜態庫;圖中紅色2處,如果為紅色,表示靜態庫尚未生成,如果為黑色,表示靜態庫生成成功。(ps:建議先選ios device 生成靜態庫,再選模擬器生成靜態庫)

7,在上圖中紅色2處,右鍵,「show in finder」,開啟資料夾,就會看到我們生成的靜態庫檔案了。

8,現在生成的是debug版本,如果想生成release版本的,可以在schema裡編輯一下:選單欄,product - > schema - > edit schema ,或者直接快捷鍵:command + < ,開啟對話方塊,左邊選擇「run」,右邊 build configuration 中選擇 release ,ok.

重新編譯執行一下,release版本就生成了。重新開啟剛才的資料夾,就會看到了。

至此,我們的靜態庫就製作完畢了。下面介紹下如何使用:

二、靜態庫的使用

如下圖所示:

儲存,編譯,執行,就會看到圖中4處紅色部分:表示我們自己的靜態庫呼叫成功了。

在錯誤資訊中,我們也可以看到,找不到必需的i386架構的 libmycommon.a 靜態庫檔案。(相同的,如果使用真機測試,工程裡卻新增了模擬器使用的i386架構的靜態庫檔案,也會報錯,此時錯誤資訊會諸如:missing required architecture armv7、armv7s 等)

三、教大家如何檢視靜態庫的架構資訊,以及如何合併模擬器和真機靜態庫。

1,首先開啟mac 終端,切換到靜態庫所在資料夾,輸入如下命令:

lipo -info libmycommon.a

回車,接著就會看到靜態庫的架構資訊了,如圖所示:

此時,我們可以知道,上圖中使用的靜態庫是armv7等架構的,即是真機使用的靜態庫。

2,合併模擬器和真機靜態庫,在終端中輸入命令:

lipo -create  libmycommon_iphone.a  libmycommon_simulate.a  -output  libmycommon.a

,之後,在終端當前資料夾下,就會看到合併後的靜態庫檔案 libmycommon.a 了。

3,在剛才的測試工程中,換用我們剛剛生成的合併版本的靜態庫檔案,這樣,不管模擬器,還是真機,都可以直接除錯執行了。

Xcode 之自己編譯靜態庫

今天介紹下,如何利用xcode,新建乙個靜態庫,以及如何編譯成i386 armv7 armv7s 等平台架構。開發環境 mac os x 10.9.4 xcode 5.0.2 一 新建靜態庫 1,開啟xcode,create a new xcode project framework library...

Xcode 之自己編譯靜態庫

今天介紹下,如何利用xcode,新建乙個靜態庫,以及如何編譯成i386 armv7 armv7s 等平台架構。開發環境 mac os x 10.9.4 xcode 5.0.2 一 新建靜態庫 1,開啟xcode,create a new xcode project framework library...

Xcode新增靜態庫以及編譯選項配置常見問題

一,xcode編譯出現link錯誤,出現 duplicate symbols for architecture i386 clang 提示.問題 鏈結時,專案有重名檔案.解決 根據錯誤提示,做如下檢查 1.taraget build settings link binary with librari...