首页 文章

在创建通用静态库时使用lipo vs“有效架构”

提问于
浏览
1

我想创建一个通用的静态库,比如名为sampleStaticLib.a,它被包含在名为HelloWorld的应用程序中 . HelloWorld应用程序需要使用静态库中定义的API,并且需要在iOS模拟器和iOS设备上运行 . 我从互联网上的各个帖子中了解到,我可以通过使用lipo工具将模拟器和设备的静态库聚合到通用库中来实现这一点,然后在HelloWorld.xcodeproj中包含通用库 .

但是,如果我执行以下操作:

  • 只需将静态库xcodeproject(sampleStaticLib.xcodeproj)中的有效体系结构设置为“armv7 armv7s arm64 i386 x86_64

  • 生成sampleStaticLibrary.a

  • 将它包含在HelloWorld.xcodeproj中

我的期望是,因为我将'sampleStaticLib'的有效架构设置为跨越x86和ARM的所有架构,所以库应该适用于模拟器和设备 . 但它在模拟器上不起作用 .

那么,在创建通用静态库时,无法设置广泛的“有效架构”取代使用“lipo工具”的需求吗?

2 回答

  • 0

    不,不幸的是,这不可能像你想的那样平凡 .

    原因是当您构建项目时,它将使用所选SDK构建所有请求的体系结构 . iOS SDK支持ARM,iOS Simulator SDK支持Intel . 您需要针对iOS SDK和针对iOS模拟器SDK的Intel切片构建ARM切片,然后将它们组合成一个通用二进制文件 .

  • 1

    它应该工作 . 例如,这个静态库

    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(Clang工具链)可以为iOS设备和iOS模拟器链接此静态库 . 并没有任何问题 .

    但它在模拟器上不起作用 .

    你什么意思?我建议您更新有关详细信息的问题 .

相关问题