如何通过Makefile编译iphone的openSSL

原文链接:http://www.cnblogs.com/tangjianke/archive/2011/09/26/2191798.html 这两天接受了一个新任务,就是学在iphone和android平台上编译openSSL,因为我对Apple知之甚少,所以在做的过程中遇到了一些困难和问题,经过学习和尝试,终于弄出来了,网上的好多教程有问题,所以自己根据自己的经验,写一篇博文和大家分享一下。
版本:OpenSSL 1.0.0e 
Xcode 4 with iOS 4.
注意:根目录定为我的本家目录即/Users/jianke.tang/
下面开始我们的旅程
1. 下载openSSL(http://www.openssl.org/source/),修改源代码 下载下来的以后进行解压,为了避免编译错误,需要进行稍微的修改,打开 crypto/ui/ui_openssl.c,然后将
static volatile sig_atomic_t intr_signal;
改为
static volatile int intr_signal;
2. 创建一个放置不同平台的库
$ mkdir ssllibs
3. 为i386模拟器编译openssl
$ cd openssl-1.0.0e
$ mkdir openssl_armv6 openssl_armv7 openssl_i386
$ ./Configure BSD-generic32 --openssldir=/Users/jianke.tang/openssl-1.0.0e/openssl_i386
修改Makefile文件
$ vi Makefile
a.找到
CC = cc
将其改为
CC= /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc -arch i386
b.就在这行下边找到CFLAG,在'='后面添加
-isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk
c.编译安装
$ make
$ make install
d.复制到上面建立的库中
$ cp -r openssl_i386 ../ssllibs
注:i386只有基于模拟器的,没有OS的,所以基于arm的和i386的是不一样的
4.为armv6 ios编译openSSL
$ make clean
$ ./Configure BSD-generic32 --openssldir=/Users/jianke.tang/openssl-1.0.0e/openssl_armv6
修改Makefile文件
a.找到
CC = cc
将其改为
CC= /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc -arch armv6
b.就在这行下边找到CFLAG,在'='后面添加
-isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk
c.编译安装
$ make
$ make install
d.复制到上面建立的库中
$ cp -r openssl_armv6 ../ssllibs
注:请注意,一定确保相关路径下有该文件,否则会出现编译错误,比如iPhoneOS4.3.sdk可能是iPhoneOS4.0.sdk版本的
5. 为armv6 ios编译openSSL5. 
$ make clean
$ ./Configure BSD-generic32 --openssldir=/Users/jianke.tang/openssl-1.0.0e/openssl_armv7
修改Makefile文件
a.找到
CC = cc
将其改为
CC= /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc -arch armv7
b.就在这行下边找到CFLAG,在'='后面添加
-isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk
c.编译安装
$ make
$ make install
d.复制到上面建立的库中
$ cp -r openssl_armv7 ../ssllibs
6. 库的处理
打开库ssllibs,在各个平台下的lib/中的libcrypto.a和libssl.a,以及在各个平台下的include文件夹
好了,我们可以创建一般性的链接库了,这样可以保证它可以根据平台自动选择。
$ lipo -create ../ssllibs/openssl_i386/lib/libcrypto.a ../ssllibs/openssl_armv6/lib/libcrypto.a openssl_armv7/lib/libcrypto.a -output ../ssllibs/libcrypto.a
$ lipo -create ../ssllibs/openssl_i386/lib/libssl.a ../ssllibs/openssl_armv6/lib/libssl.a openssl_armv7/lib/libssl.a -output ../ssllibs/libssl.a

7.到这里就大功告成了,不过为了帮助大家更更好的理解和使用,这里我教大家如何修改IPHONE-XCODE PROJECT
1. Copy the “include” folder from OpenSSL into your project-folder
2. Copy the libcrypto.a and libssl.a files into your project-folder
3. Drag the libcrypto.a and libssl.a files into your XCode Framework Folder-Tree
4. Open the Build-Info from your “Target” (Righclick on Target – Get Info)
    Change Library Search Paths to 
       $(inherited) "$(SRCROOT)"
6. Change User Header Search Paths to include
7. Activate Always Search User Paths

8. 这里有个例子工程,大家可以参考一下,别的我就不赘述了 http://github.com/x2on/OpenSSL-for-iPhone。
这个库是iOS 3.2/4.0 XCode Project with OpenSSL 1.0.0a
使用了MD5-algorithm to calculate an md5 hash from an UITextfield.

9.鄙人开了个网点,往多加支持,谢谢:gezikongjian.taobao.com(格子空间)

转载于:https://www.cnblogs.com/tangjianke/archive/2011/09/26/2191798.html

上一篇:python3 classmethod 与 staticmethod的区别


下一篇:python 静态函数定义 @staticmethod