让ios支持openssl

今天老板发给我一个项目,发现缺少libssl.a和libcrypto.a文件,于是上网搜了下,大概是这样子理解的。

这好像是一个代码库的样子,要让他支持ios需要打个包,打成.a文件。

这个笨方法完全不会用- -,我用的是外国友人的那个方法~~感谢下原文作者

http://iosco.de/use-openssl-on-ios.html

iOS 生成通用openssl库

发表回复

服务器PHP端定义接口,需要传递使用RSA加密的参数,为此IOS端需要引入openssl库,以便进行RSA加密、解密。本文将描述,在IOS开发过程中如何生成虚拟机、真机通用的openssl库。

笨方法生成通用openssl库

何为通用:使真机和模拟器均可使用生成后的openssl库

一、下载openssl

通过http://www.openssl.org/source/下载openssl最新源码

二、编译openssl

进入openssl目录,创建相应子文件夹,用于存放编译后的不同库。

准备操作

    1. 创建目录

1

2

# 用于存储不同架构下,使用openssl编译后的静态资源文件包

mkdir openssl_arm64 openssl_armv7 openssl_armv7s openssl_i386

    1. 文本替换

进入openssl目录下,打开 crypto/ui/ui_openssl.c 文件,搜索 static volatile sig_atomic_t intr_signal; 替换为 static volatile int intr_signal

编译模拟器使用的openssl库

    1. 配置OpenSSL信息

1

2

# openssldir选项是其编译后存储的路径,将其设置为刚才创建的openssl_i386

./configure BSD-generic32 --openssldir=/Users/xxx/openssl-1.0.2/openssl_i386

    1. 更新makefile

1

2

3

4

5

# 打开makefile文件,搜索 CC= gcc,将其替换为下面内容

CC= /Applications/Xcode.app/Contents/Developer/usr/bin/gcc -arch i386

# 在CC=的下一行,内容为 CFLAG= 配置项,在其等号后面的空格后“加入”如下内容(原CFLAG后面内容不删除,保留不变)

CFLAG= -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk

    1. 编译

退出makefile文件的编译,保存makefile文件。

在终端执行如下命令:

1

2

3

make

make install

    1. 备份文件

当make install执行结束后,查看openssl_i386 文件夹是否已经生成相关内容。如果已经生成,可将openssl_i386目录整体拷贝走,用于备份。

真机使用的openssl库

真机使用的openssl库,与上述生成模拟器使用库的步骤一样,微调如下:

    1. 配置OpenSSL信息

每次生成不同环境的openssl库,需要重新配置configure。分别在终端实现如下命令:

1

2

3

4

5

# 先清空上次编译配置

make clean

# 更换存储目录

./configure BSD-generic32 --openssldir=/Users/xxx/openssl-1.0.2/openssl_xxxx

    1. 更新makefile文件

1

2

3

4

5

6

# 打开makefile文件,搜索 CC= gcc,将其替换为下面内容 arch后面为真机所支持架构:arm64 arm7v armv7s

CC= /Applications/Xcode.app/Contents/Developer/usr/bin/gcc -arch armv7s

# 在CC=的下一行,内容为 CFLAG= 配置项,在其等号后面的空格后“加入”如下内容(原CFLAG后面内容不删除,保留不变)

# 配置项中,指向真机SDK,而非模拟器SDK /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk

CFLAG= -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk

三、合并不同架构openssl库

现在已经生成模拟器及真机环境所需openssl库,需要将其合并。进入到备份相关文件的目录中,执行如下命令即可合并:

1

2

3

4

5

6

7

8

# 合并文件

lipo -create openssl_arm64/lib/libcrypto.a openssl_armv7/lib/libcrypto.a openssl_armv7s/lib/libcrypto.a openssl_i386/lib/libcrypto.a -output ./libcrypto.a

lipo -create openssl_arm64/lib/libssl.a openssl_armv7/lib/libssl.a openssl_armv7s/lib/libssl.a openssl_i386/lib/libssl.a -output ./libssl.a

# 查看合并后库支持的架构信息

lipo -info libcrypto.a

lipo -info libssl.a

快捷生成通用openssl库

从上述操作流程大家可看出,真机环境下,每次编译的流程相同,无非替换-arch后面内容。再考虑模拟器环境,可以通过脚本快速生成需要编译的环境。

GitHub上,已经有外国友人帮咱们做好了相应的脚本,我们可以愉快安静等待程序自动生成适用于真机及模拟器的openssl库。具体请见:https://github.com/x2on/OpenSSL-for-iPhone

1

2

# 好安静的~

./build-libssl.sh

报错说明

在编译过程后(make执行过后),可能会有如下报错信息,可以忽略!

clang: warning: argument unused during compilation: ‘-pthread’
making all in tools…
make[1]: Nothing to be done for `all’.

时间: 2024-08-30 16:44:09

让ios支持openssl的相关文章

IDHTTP-HTTPS通讯方法(Indy10.2.3之前仅支持OpenSSL的0.9.8以前的版本)

加载https的站点页面内容的时候记得在窗体上加上“IdSSLIOHandlerSocketOpenSSL1” 以及idhttp里面IOHandler为“IdSSLIOHandlerSocketOpenSSL1” 不然老报“IOHandler value is not valid.”错误. dnspod API V2.0 就是用的https 用delphi开发客户 只需要用idhttp就可以post 在界面上放一个TIdHTTP控件,命名为IdHTTP1,再放一个TIdSSLIOHandlerS

MySQL检查运行的mysqld服务器是否支持OpenSSL

1.问题背景 在MySQL服务器和客户端之间使用SSL连接,需要判断系统是否支持OpenSSL,如何查看是否支持OpenSSL 2.解决方案 利用MySQL自带的命令执行查询 SHOW VARIABLES LIKE 'have_openssl'; 3.执行结果 如果Value为"Yes"才支持OpenSSL,但是查询结果为"DISABLED",表示不支持OpenSSL 版权声明:本文为博主原创文章,未经博主允许不得转载.

ios 编译openssl支持arm64(转)

最近在编译支付宝 快捷支付(无线) ios 端的时候发现demo不支持arm64.在网上找了下,看到客服说是openssl的库文件不支持arm64,于是自己编译了支持arm64的库文件,发现还是不行,提示原来淘宝的库文件也不支持.问他们客服,缺迟迟不给出解决方案,到后面居然连话都不回了.. 以上都是题外话,现在来看看如何编译支持arm64的openssl吧.我是在mac os 10.9.3,xcode5.1.1下进行编译的. 先下载openssl的源文件 http://www.openssl.o

ios编译openssl指南

首先,openssl支持ios编译,这是毫无疑问的 ios上的编译也无外乎configure make make install模式,但是有一些不同 比如 ./Configure iphoneos-cross --openssldir="${cur_output}" configure要用Configure命令,传递交叉参数iphoneos-cross, openssldir为安装目录 之后调用此句 sed -ie "s!^CFLAG=!CFLAG=-miphoneos-ve

iOS支持横屏旋转, 常规方法和强制选择

横屏支持 常规方法支持旋转 // controller的内容是否支持自动旋转 - (BOOL)shouldAutorotate { return YES; } 模拟器iOS7.1 : 转横屏时,被调用:横屏转竖屏,也被调用. 模拟器iOS8.0 : 转横屏时,被调用:横屏转竖屏,不被调用. 模拟器iOS9.0 : 转横屏时,被调用:横屏转竖屏,也被调用. http://stackoverflow.com/questions/26503423/shouldautorotate-behavior-i

iOS支持arm64

Apple要求2015/2/1之后提交的包必须包含arm64,否则要被拒.因此,对于64-bit的支持可谓迫在眉睫,尤其是对于有很多遗留代码的项目,更要提早开工. 如何支持arm64 为了支持arm64结构,需要满足一下几个条件: 在Architectures设置项里添加arm64条目,如果使用的Xcode是6.0以上的版本,使用默认的配置项即可. 在Valid Architectures设置项里添加arm64条目. 讲Deployment Target改为大于等于5.1.1即可,因为arm64

iOS支持Https

http://oncenote.com/2014/10/21/Security-1-HTTPS/?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io 1. HTTPS 其实HTTPS从最终的数据解析的角度,与HTTP没有任何的区别,HTTPS就是将HTTP协议数据包放到SSL/TSL层加密后,在TCP/IP层组成IP数据报去传输,以此保证传输数据的安全:而对于接收端,在SSL/TSL将接收的数据包解密之后,将数据传给HTT

libcurl 支持 openssl 交叉编译 mips rt5350

By admin | 11月18日 0 Comment Advertisement 历经半个月终于把libcurl库编译出来,参考网上很多博客,最终把自己要的库编译出来. 首先说明一下,我要这个库的目的.我在RT5350上跑openWRT需要向服务器提交数据,用http协议,且需要ssl加密.经过网上查找只有libcurl合适,于是我用mipsel-openwrt-linux-gcc开始交叉编译libcurl, 开始的时候一直在CSDN下载 libcurl的源代码包,版本不一样里面Makefil

window下开启php支持openssl 的方法

在安装腾讯微博API程序iweobo时,发现PHP不支持openssl_open(),如何在PHP扩展里打开php openssl支持? 1.打开PHP目录,在php.ini中把“extension=php_openssl.dll”前面的“;”去掉 2.复制php安装目录中的: libeay32.dll.ssleay32.dll至c:windowssystem32 3.复制php_openssl.dll至c:windowssystem32 4.重启IIS或者apache环境 这样就可以打开php