【问题标题】:Creating static library for all builds为所有构建创建静态库
【发布时间】:2009-12-27 05:36:11
【问题描述】:

当我获得第 3 方静态库时,我可以在我的调试或发布版本中为模拟器和设备使用它。但是,当我在本地构建时,它是针对调试模拟器/设备或发布的。然后我必须协调我的主机应用程序以匹配库构建。如何像许多 3rd 方静态库一样创建与主机应用的所有构建版本一起使用的单个静态库构建?

【问题讨论】:

    标签: iphone cocoa-touch xcode


    【解决方案1】:

    我认为 iPhone 没有为此提供“神奇”的解决方案。 我曾经寻找同样的东西没有找到任何“易于使用”的解决方案。 我能找到的最好的: http://www.clintharris.net/2009/iphone-app-shared-libraries/ 尤其是关于“胖库”的部分,指的是http://latenitesoft.blogspot.com/2008/10/iphone-programming-tips-building-unix.html 但是 MAKE 配置看起来并不容易(至少对我来说)。

    我这样做的方式: 我为我需要的所有配置(例如模拟器 x86 调试和设备臂调试)分别构建静态库。这给了我两个不同的 .a 文件。 我将它们重命名为 mylibrary_arm.a 和 mylibrary_x86.a

    然后,对于任何想要使用这两个库的项目,我将两个 .a 文件拖放到需要 .a 库 + .h 标头的客户端项目中,以启用这些库的使用。 然后,当我在此客户端项目中选择模拟器或设备时,编译器会选择正确的 .a 自动编译并正常运行。

    所以最后,唯一无聊的阶段是 .a 本身的生成,但它们的使用非常简单,XCode 会自动调整自己。

    【讨论】:

    • 好的,好主意。我猜生成的 .app 文件将只包含与其构建对应的 .a 文件?
    • 因为这是一个静态链接,所以您不会在 .app 文件中真正看到生成的 .a(为当前选定的目标生成了一个可执行文件)。但是,如果我查看生成的二进制文件大小,它看起来非常正确 = 似乎没有将无用的可执行代码嵌入到这个二进制文件中。
    • 您是否为模拟器和设备创建了调试/发布版本,并最终在宿主项目中创建了四个版本的库文件?我注意到如果您在一个项目中有两个相同的文件名,Xcode 不会抱怨 - mylib_debug.a 用于模拟器和设备。
    • 对于发布/调试我不能说,我没有在实践中这样做。但是对于设备/模拟器(我总是在调试中构建):XCode 不会抱怨并采用正确的构建。我希望它对发布/调试做同样的事情并选择正确的.....:/
    猜你喜欢
    • 2023-04-03
    • 1970-01-01
    • 2019-04-29
    • 2021-01-05
    • 2014-05-28
    • 1970-01-01
    • 2010-09-25
    • 2011-08-09
    • 1970-01-01
    相关资源
    最近更新 更多