2014-12-19 47 views
1

我想創建一個通用靜態庫,稱爲sampleStaticLib.a,它被包含在名爲HelloWorld的應用程序中。 HelloWorld應用程序需要使用靜態庫中定義的API,並且需要在iOS模擬器和iOS設備上工作。我從Internet上的各種帖子瞭解到,我可以通過使用lipo工具將模擬器和設備的靜態庫聚合到通用庫中,然後在HelloWorld.xcodeproj中包含通用庫來實現此目的。創建通用靜態庫時使用lipo vs「valid architecture」

然而,作爲選擇,如果我做到以下幾點:

  • 只需設置靜態庫xcodeproject (sampleStaticLib.xcodeproj)有效的架構「的ARMv7 armv7s arm64的i386 x86_64的
  • 產生sampleStaticLibrary。一個
  • 包括它在HelloWorld.xcodeproj

我意料的是,因爲我設置的的有效架構ampleStaticLib'跨越x86和ARM的所有體系結構,該庫應該可以在模擬器和設備上工作。但它在模擬器上不起作用。

因此,在創建通用靜態庫時,不能設置一個寬泛的「有效體系結構」替換使用'lipo工具'的需要嗎?

回答

0

它應該工作。舉例來說,這個靜態庫

https://github.com/cocos2d/cocos2d-x-3rd-party-libs-bin/blob/v3/png/prebuilt/ios/libpng.a

它的ARMv7,armv7s,arm64,i386和x86_64的二進制文件。

$ file libpng.a 
libpng.a: Mach-O universal binary with 5 architectures 
libpng.a (for architecture armv7): current ar archive random library 
libpng.a (for architecture armv7s): current ar archive random library 
libpng.a (for architecture i386): current ar archive random library 
libpng.a (for architecture x86_64): current ar archive random library 
libpng.a (for architecture cputype (16777228) cpusubtype (0)): current ar archive random library <-- It's arm64 

的Xcode(鏘工具鏈)可鏈接以iOS裝置和也iPhone模擬器此靜態庫。並沒有任何問題。

但它不適用於模擬器。

你是什麼意思?我建議你更新關於它的更多細節的問題。

1

不幸的是,這不可能像你想的那麼平凡。

原因是,當您構建項目時,它將使用選定的SDK爲所有請求的體系結構構建。 iOS SDK支持ARM,iOS Simulator SDK支持Intel。您需要針對iOS SDK和Intel切片針對iOS Simulator SDK構建ARM切片,然後將它們一起製作成通用二進制文件。

+0

謝謝傑里米。那麼,在iOS SDK中,VALID_ARCHS =「armv7 armv7s arm64 i386 x86_64」是什麼意思?我在幾個帖子中看到了這樣的設置。 'i386'和'x86_64'如何適應這個空間,如果這些架構甚至不被iOS設備支持,就像您在下面的鏈接中看到的那樣? https://developer.apple.com/library/mac/documentation/DeveloperTools/Reference/XcodeBuildSettingRef/1-Build_Setting_Reference/build_setting_ref.html#//apple_ref/doc/uid/TP40003931-CH3-SW85 – user777355

+0

這是可以被選中。通常,開發人員通過在項目窗口的左上角選擇具有活動方案的設備或模擬器來選擇體系結構。如果開發者選擇了iPhone5設備,那麼活動架構是armv7。如果選擇iPhone3GS,Xcode將會出錯,因爲armv6不在列表中。 –

+0

@WaltSellers:如果沒有iOS設備將運行這些列表,那麼爲什麼還要將架構「i386」和「x86_64」添加到此列表中? (至少直到今天)。即使x86體系結構未包含在「VALID_ARCHS」中,默認的xcodeproject仍會在模擬器上運行。 – user777355