最近在编译支付宝 快捷支付(无线) ios 端的时候发现demo不支持arm64。在网上找了下,看到客服说是openssl的库文件不支持arm64,于是自己编译了支持arm64的库文件,发现还是不行,提示原来淘宝的库文件也不支持。问他们客服,缺迟迟不给出解决方案,到后面居然连话都不回了。。

以上都是题外话,现在来看看如何编译支持arm64的openssl吧。我是在mac os 10.9.3,xcode5.1.1下进行编译的。

先下载openssl的源文件

http://www.openssl.org/source/

网页上红色标明的包为最新的版本。

在openssl-1.0.1h目录下创建4个文件夹,分别为arm64,armv7,armv7s,i386。它们分别用于存放指定平台的库文件。

****编译i386平台

打开/openssl-1.0.1h/crypto/ui/ui_openssl.c进行修改,将

static volatile sig_atomic_t intr_signal;

修改为

static volatile int intr_signal;

打开终端,进入到openssl-1.0.1h目录,输入命令

./configure BSD-generic32 --openssldir=/Users/Kyo/Desktop/openssl-1.0.1h/i386

(/Users/Kyo/Desktop/openssl-1.0.1h/i386为上面创建的i386文件夹路径)

命令完成后,在openssl-1.0.1h目录下会生成很多文件,找到其中的makefile文件并打开,

编辑 makefile 文件,将

CC= gcc

修改为

CC= gcc -arch i386

在下一行CFLAG = ......的最后增加

-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.1.sdk

在终端执行命令

make

再接着执行命令

make install

执行完成后,在i386文件夹下将会生成多个文件和文件夹,/lib目录下存放着编译成功的库文件libcrypto.a 和 libssl.a

****编译其它平台

接着我们需要编译其它平台的库文件,先在终端执行命令make clean 清空之前的配置和缓存(发现执行这个命令并不能完成清空,我的做法是,先保存上面生成的i386的库文件,执行make clean命令,然后删除整个openssl-1.0.1h,重新解压一个openssl-1.0.1h,然后再继续其它平台的库文件编译)

既然是新解压的openssl-1.0.1h,我们需要重新上面的几个步骤,修改ui_openssl.c,执行configure命令,修改makefile文件。

修改makefile跟i386中有所不同,

CC= gcc

修改为

CC= gcc -arch armv7

(其中armv7是指编译armv7平台下的库文件,如果改为arm64,就是编译arm64平台下的库文件)

在下一行CFLAG = ......的最后增加

-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneSimulator7.1.sdk

(i386中的路径是iPhoneSimulator.platform,而其它平台都是iPhoneOS.platform)

在终端执行命令

make

再接着执行命令

make install

执行完成后,在armv7文件夹下将会生成多个文件和文件夹,/lib目录下存放着编译成功的库文件libcrypto.a 和 libssl.a

如此重复生成各个平台的库文件后,开始合并操作。

****制作“通用”静态库

执行终端命令合并 libcrypto.a 库(确保终端中的路径正确):

lipo -create /i386/lib/libcrypto.a /armv7/lib/libcrypto.a /armv7/lib/libcrypto.a /arm64/lib/libcrypto.a -output /libcrypto.a

执行终端命令合并 libssl.a 库(确保终端中的路径正确):

lipo -create /i386/lib/libssl.a /armv7/lib/libssl.a /armv7/lib/libssl.a /arm64/lib/libssl.a -output /libssl.a

至此,我们完成了openssl的编译。

在此感谢:

http://blog.csdn.net/kmyhy/article/details/6534067

http://dingran.iteye.com/blog/1743496

已经编译好的下载地址:

https://github.com/st3fan/ios-openssl

http://download.csdn.net/detail/shengyumojian/7616347

ios 编译openssl支持arm64(转)的更多相关文章

  1. 【转】iOS编译OpenSSL静态库(使用脚本自动编译)

    原文网址:https://www.jianshu.com/p/651513cab181 本篇文章为大家推荐两个脚本,用来iOS系统下编译OpenSSL通用库,如果想了解编译具体过程,请参看<iO ...

  2. 实战FFmpeg--编译iOS平台使用的FFmpeg库(支持arm64的FFmpeg2.6.2)

    编译环境:Mac OS X 10.10.2 ,Xcode 6.3  iOS SDK 8.3        FFmpeg库的下载地址是 http://www.ffmpeg.org/releases/ . ...

  3. net-snmp源码VS2013编译添加加密支持(OpenSSL)(在VS里配置编译OpenSSL)

    net-snmp源码VS2013编译添加加密支持(OpenSSL) snmp v3 协议使用了基于用户的安全模型,具有认证和加密两个模块. 认证使用的算法是一般的消息摘要算法,例如MD5/SHA等.这 ...

  4. 实战FFmpeg编译支持arm64(转)

    App store要求上架的app必须支持arm64.而手中的ffmpeg还不支持arm64, 百度下ffmpeg支持arm64方法,网上有很多资料.其中一篇是使用脚本自动编译实现的.本文就是使用它的 ...

  5. 在window平台下,自己DIY编译OpenSSL,Libcurl ,来支持HTTPS传输协议

    1 缘起 原来就了解些libcurl,一直没有机会在项目实际使用libcurl.   恰好最近一个云存储的项目,服务器使用openstack 恰好我负责现在的一个云存储SDK c++版本的开发中. 与 ...

  6. 静态编译 Qt5.7.0 (含 openssl 支持)

    关于Qt静态便宜的环境等,请先参见 Win10 + VS2015 下编译 Qt5.6.0 . 首先编译 openssl .我这里用的版本是 openssl 1.0.2j (新的1.1版本的便宜稍有不同 ...

  7. Ubuntu+NDK编译openssl(为了Android上使用libcurl且支持HTTPS协议)

    为了Android上使用libcurl且支持HTTPS协议,需要依赖openssl,因此先来了解一下如何编译OpenSSL1.编译ARM下的共享库(默认的)我使用的是guardianproject的o ...

  8. iOS工程如何支持64-bit(转)

    苹果在2014年10月20号发布了一条消息:从明年的二月一号开始,提交到App Store的应用必须支持64-bit.详细消息地址为:https://developer.apple.com/news/ ...

  9. iOS工程如何支持64-bit

    苹果在2014年10月20号发布了一条消息:从明年的二月一号开始,提交到App Store的应用必须支持64-bit.详细消息地址为:https://developer.apple.com/news/ ...

随机推荐

  1. Ext学习-基础概念,核心思想介绍

    1.目标   本阶段的目标是通过学习一些基础知识来对EXTJS有个整体的了解,知道EXTJS的基础语法,核心设计思想等等 2.内容   1.基础部分学习   2.EXTJS类系统介绍   3.EXTJ ...

  2. C++文件操作之get/getline

    问题描述:                C++ 读取写入文件,其中读取文件使用get和getline方式 参考资料: http://simpleease.blog.163.com/blog/stat ...

  3. 利用vim阅读源代码一个好用的工具

    阅读源代码时常常遇到找变量,函数定义的问题.vim为我们提供了一个好用的工具,ctags. 安装 ctags. 在 libvirt的源代码根目录运行 ctags -R . vim -t virConn ...

  4. threaded模式下,比prefork模式要省资源

    关于nginx + fastcgi + django 2009-03-10 17:14:43 分类: 系统运维 最近用django开发了一套广告投放系统,这套系统其实是一套网络广告联盟系统,包括广告的 ...

  5. 轻轻修改配置文件完成 OpenStack 监控

    当我们使用虚拟化云平台 OpenStack 时,必然要时时监控其虚拟机性能,随着近年企业级数据中心的不断发展,像混合虚拟化环境的业务需求也在持续增长中,因而也随之带来的监控需求更显重要,所以小编带来一 ...

  6. 初学tornado之MVC版helloworld

    作者:the5fire | 标签: MVC  tornado  | 发布:2012-08-06 2:41 p.m. 文接上篇,看我一个简单的helloworld,虽然觉得这个框架着实精小,但是实际开发 ...

  7. hdu 1063 Exponentiation

    求实数的幂,这个用C++写的话有点长,但是用Java写就非常方便了…… );            System.out.println(an);        }    }}

  8. Android 通过程序添加桌面快捷方式

    原理:通过代码向 Launcher 中的广播接收者发送广播来创建快捷图标. 首先要声明的权限是: <!--添加图标的权限--> <uses-permission android:na ...

  9. H5 移动Web框架集合

    http://frozenui.github.io/  一个简洁的h5前端框架 http://weui.github.io/weui/ 腾讯出的WebUI 风格是基于微信

  10. 防止注入网上查了下用SqlParameter可以,那SqlParameter处理单引号时候是自动转义了吗

    String sql = String.Format(); SqlCommand com = new SqlCommand(sql, con); 一般而言,把 一个单引号,替换成 两个单引号就可以了.