【问题标题】:Creating static library for iPhone为 iPhone 创建静态库
【发布时间】:2010-09-25 18:31:08
【问题描述】:

我想将一个开源库用于我的 iPhone 应用程序。该库是用 C 语言编写的,并使用 Makefile 进行编译。我想使用静态库。

如果我将 .a 文件添加到我的项目依赖项中,它可以很好地与模拟器配合使用,但在针对 iPhone SDK 时它不会链接(肯定是因为 .a 文件是为英特尔平台编译的)。

我应该使用哪些 GCC 编译器标志来为 iPhone SDK 编译静态库?我认为“-arch”选项可以为我提供 iPhone 架构,但没有运气。

任何帮助将不胜感激。

【问题讨论】:

    标签: iphone xcode static-libraries


    【解决方案1】:

    对于基于 autoconf 的库,我会投票给 Christopher Stawarz 的构建脚本:

    http://pseudogreen.org/blog/build_autoconfed_libs_for_iphone.html

    使用此脚本,您可以通过单个命令自动执行整个过程,并轻松为不同平台提供库二进制文件,例如 iPhoneOS 2.0/2.1/2.2/2.2.1 和 iPhoneSimulator 2.0/2.1/2.2/2.2。 1.

    但是,由于the change of Xcode 3.1,$(SDKROOT) 构建设置变成了一些短名称,例如“macosx10.5”、“iphoneos2.2.1”或“iphonesimulator2.2.1”。因此,他在文章中提到的关于在 Xcode 中为库和标头设置搜索路径的方式将不起作用(在 Xcode 3.1 中)。您需要自己对路径进行硬编码。

    【讨论】:

    • 有人对此问题有更新的答案吗?
    【解决方案2】:

    尝试使用 arm-apple-darwin-gcc 作为 GCC 应用程序进行编译。然后,您可以使用 lipo 将 2 个静态库(arm 和 386)合并在一起,以便在 sim 与设备上的开发是无缝的。

    【讨论】:

    • 感谢您的信息。我仍在尝试使库与 arc-apple-darwin-gcc 一起编译...
    【解决方案3】:

    只需使用 x86 sdk(iphone 模拟器)正常编译,然后再次使用 arm/ios 平台(arm-xxx-xxx),然后使用“LIPO”(命令行工具)将两个静态库合并到 .a 中.工作一种享受,它比重新发明轮子更简单(至少对于那些小的库)......我用 liblo 和 libdmtx 做到了,我没有任何问题,我花了大约 10 分钟来做这两个...... :-)

    【讨论】:

      【解决方案4】:

      根据here提供的提示多次尝试使用arm GCC编译器后,我放弃了。就我而言,将库简单地移植到 XCode 比尝试为 iPhone 编译静态库要简单得多。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-04
        • 1970-01-01
        • 2011-04-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多