我想将一个开源库用于我的 iPhone 应用程序。该库是用 C 语言编写的,并使用 Makefile 进行编译。我想使用静态库。
如果我将 .a 文件添加到我的项目依赖项中,它可以很好地与模拟器配合使用,但在针对 iPhone SDK 时它不会链接(当然因为 .a 文件是为英特尔平台编译的)。
我应该使用哪些 GCC 编译器标志来编译 iPhone SDK 的静态库?我认为“-arch”选项将为我提供 iPhone 架构,但没有运气。
任何帮助,将不胜感激。
我想将一个开源库用于我的 iPhone 应用程序。该库是用 C 语言编写的,并使用 Makefile 进行编译。我想使用静态库。
如果我将 .a 文件添加到我的项目依赖项中,它可以很好地与模拟器配合使用,但在针对 iPhone SDK 时它不会链接(当然因为 .a 文件是为英特尔平台编译的)。
我应该使用哪些 GCC 编译器标志来编译 iPhone SDK 的静态库?我认为“-arch”选项将为我提供 iPhone 架构,但没有运气。
任何帮助,将不胜感激。
对于基于 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。
但是,由于Xcode 3.1 的更改,$(SDKROOT) 构建设置变成了一些简称,如“macosx10.5”、“iphoneos2.2.1”或“iphonesimulator2.2.1”。因此,他在文章中提到的关于在 Xcode 中为库和标头设置搜索路径的方式将不起作用(在 Xcode 3.1 中)。您需要自己对路径进行硬编码。
尝试使用 arm-apple-darwin-gcc 作为 GCC 应用程序进行编译。然后,您可以使用 lipo 将 2 个静态库(arm 和 386)合并在一起,以便在 sim 与设备上的开发是无缝的。
只需使用 x86 sdk(iphone 模拟器)正常编译它,然后再次使用 arm/ios 平台(arm-xxx-xxx),然后使用“LIPO”(命令行工具)将两个静态库组合在 .a 中。工作一种享受,它比重新发明轮子更简单(至少对于那些小的库)......我用 liblo 和 libdmtx 做到了,我没有任何问题,我花了大约 10 分钟来做这两个...... :-)
After several attempts to use the arm GCC compiler with the tips provided here, I gave up. In my case, it is much simpler to simply port the library to XCode than trying to compile a static library for the iPhone.