ios6和iphone5的適配之第三方靜態庫

來源:互聯網
上載者:User

如果你的工程沒有使用第三方的靜態庫或者framework,那麼看完舊工程適配iOS6和iPhone5的一些故事基本上適配也就結束了,可是像筆者這樣有的工程裡用到第三方庫了,打包的時候還會提示下面的問題:

ld: file is universal (3 slices) but does not contain a(n) armv7s slice: /Users/rainbird/Desktop/myapp/iFileManager/iFileManager/ZBarSDK/libzbar.a for architecture armv7s
clang: error: linker command failed with exit code 1 (use -v to see invocation)

上面的提示就是我使用的libzbar這個庫不支援armv7s。
關於第三方庫,如果是閉源的,像一些廣告的SDK以及合作方提供的SDK就只能等了,人家啥時候更新啥時候算。像我遇到的ZBarSDK,這種第三方開源的SDK,就不要等了,還是自已動手豐衣足食吧。
首先關於閉源的庫,一個臨時的解決辦法就是,先取消對armv7s的支援,這樣就可以不用等第三方的庫就開始測試了,辦法是:
在Xcode裡,點擊相應的Target,然後點Build Settings,找到VALID_ARCHS,然後刪除裡面的arvm7s,就可以了。

ok,上面只是臨時解決辦法,說正事兒。以編譯ZBar為例:
1.去Zbar的首頁,下載源碼包。
2.解壓以後,進入裡面的iPhone檔案夾,刪除裡面的Examples,雙擊zbar.xcodeproj運行工程。
3.Command+B編譯工程(當然了這一步會提醒更新Setting,建議更新完以後再運行)。

4.然後在lib上點右鍵去目錄裡找嘍。

ok,本來故事到這裡應該就結束了,但是上面找到的那個檔案,只能在真機用,模擬器用不了,怎麼辦呢?
進入到這個工具的Build目錄,會看到下面這些目錄

Debug-iphoneos/          Debug-iphonesimulator/   Release-iphoneos/        Release-iphonesimulator/

自已動手將模擬器的包和真機的包合并一下就好了。

[rainbird@localhost Products]$ pwd
/Users/rainbird/Library/Developer/Xcode/DerivedData/zbar-athgobfbdtwgftgcogpuwegpawlj/Build/Products
[rainbird@localhost Products]$ lipo -create Release-iphoneos/libzbar.a Release-iphonesimulator/libzbar.a -o libzbar.a

解釋一下lipo合并兩個庫的命令:lipo -create 第一個包 第二個包 -o 合并以後的包
這樣的話,得到的libzbar.a就可以同時在模擬器和真機用了。這裡有個小插曲,靜態庫編譯一次,會產生所有的包,而我一上來就用的真機上的包,然後模擬器上用不了,又在真機的位置找了半天,以為產生不了模擬器的包,哎,思維定勢了。
關於lipo還有一個常用的命令就是查看包的資訊-info參數

[rainbird@localhost Products]$ lipo -info libzbar.a
Architectures in the fat file: libzbar.a are: armv7 (cputype (12) cpusubtype (11)) i386

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.