zoukankan      html  css  js  c++  java
  • ios 编译openssl支持arm64(转)

    最近在编译支付宝 快捷支付(无线) 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

  • 相关阅读:
    javascript 闭包与函数变量作用域
    javaScript for循环
    node-inspector调试node项目
    nodejs async异步常用函数总结
    nodejs安装配置新手篇
    requirejs笔记
    使用nodejs中httpProxy代理时候出现404异常
    Bluebird-Collections
    Bluebird-Core API (三)
    Bluebird-Core API(二)
  • 原文地址:https://www.cnblogs.com/yuanxiaoping_21cn_com/p/4535952.html
Copyright © 2011-2022 走看看