我想在我的iPhone应用程序中使用一个开源库。该库是用C语言编写的,并使用Makefile编译。我想使用静态库。
如果我将.a文件添加到我的项目依赖项中,它可以很好地与模拟器配合使用,但在定位iPhone SDK时它不会链接(当然因为.a文件是为Intel平台编译的)。
我应该使用哪些GCC编译器标志来编译iPhone SDK的静态库?我认为'-arch'选项会为我提供iPhone架构,但没有运气。
任何帮助都将不胜感激。
答案 0 :(得分:6)
对于基于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中)。您需要自己对路径进行硬编码。
答案 1 :(得分:3)
尝试使用arm-apple-darwin-gcc作为GCC应用程序进行编译。然后,您可以使用lipo将2个静态库(arm和386)合并在一起,这样SIM卡与设备的开发就是无缝的。
答案 2 :(得分:1)
使用x86 sdk(iphone模拟器)正常编译,然后再使用arm / ios平台(arm-xxx-xxx),然后使用“LIPO”(命令行工具)组合.a中的两个静态库。工作一个款待,它比重新发明轮子更简单(至少对于那些小型的libs)....我用liblo和libdmtx这样做,我没有任何问题,我花了10分钟做两个... : - )
答案 3 :(得分:0)
在多次尝试使用arm GCC编译器并提供here提示后,我放弃了。在我的例子中,简单地将库移植到XCode比尝试为iPhone编译静态库要简单得多。