在IOS5.1上编译Curl库

最近项目需要在IOS上使用Curl库,所以最重要的就是先把这个库编译出来。在网上也参考了一些文章,下面把我自己实践的过程记录下来,供以后参考。

1.从官方下载Curl源代码。地址:http://curl.haxx.se/download.html

      由于在列表中没有基于IOS编译出来的二进制版本,所以只能下载源代码来自己编译。所以我选择最新的7.26代码压缩包。

2.解压源代码,用命令行终端进入源代码目录。

3.执行配置命令。

命令1:

CC=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2

 

命令2:
export CFLAGS="-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk"

 

命令3:
export LDFLAGS="-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk -Wl,-syslibroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk"

命令4:

export CPP=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/llvm-cpp-4.2

 

命令5:

export AR=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/ar

 

命令6:

export RANLIB=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/ranlib

命令7:

./configure --disable-shared --without-ssl --without-libssh2 --without-ca-bundle --without-ldap --disable-ldap --host=arm-apple-darwin10

 

需要注意:

(1) 这里格式限制,会有自动换行。其实每个命令都必须在一行。

(2) 这里的路径是我机器上的路径,仅供参考。在选择目录的时候要看清楚目录中指定的那个文件是否存在。(上文中红色字标识)。

(3) 这里说明的文件都是基于IOS5.1系统的。IOS4.x版本中文件名称不一致。(下面是4.2到5.1的对照关系)

 

arm-apple-darwin10-gcc-4.2.1  ===>   arm-apple-darwin10-llvm-gcc-4.2

iPhoneOS4.2.sdk                     ===>    iPhoneOS5.1.sdk

cpp                                        ===>    llvm-cpp-4.2

(4)如果配置正确,命令7执行时不会出现报错。如果报错也不要紧,会提示查看错误日志。打开日志仔细看看就知道问题出在哪里,比如某个执行程序或文件没找到之类的。

 

4.在Xcode中建立Cocoa Touch Static Library工程,将代码中的src和lib目录的所有文件添加进工程。删除src/macos 目录中的文件。并且把 Makefile 和 Makefile.inc从target中去掉。

 

5.选中项目的Target查看属性,在info页面中搜索 other C Flags 这个名称。并在该项下面添加如下命令:

-DHAVE_CONFIG_H -I/Users/XXX/curl-7.26.0/include -I/Users/XXX/curl-7.26.0/lib

其中路径需要修改成自己机器上该文件夹所在的路径。

 

6.编译虚拟机版本和真机版本。

 

7.最后一步,使用lipo命令制作模拟器和真机通用版本的静态库。通用版本就是在测试时这个静态库可以在虚拟机上用,也可以在设备上用。其实该命令就是把两个版本的.a文件合并成一个。

lipo -create /XXX/libcurl.a /XXX/libcurl.a -output libcurl-release.a

 

在把这个静态库添加进项目以后,编译的时候报错,那就需要在项目中添加 libz.dylib 的动态链接库。

posted @ 2012-06-23 14:34  徐淼  阅读(2542)  评论(3编辑  收藏  举报