mac android openssl编译

1,568 阅读1分钟

mac android openssl编译

  • 首先到github上下载最新的代码

    mkdir androidopenssl
    
    cd androidopenssl
    
    git clone https://github.com/openssl/openssl
    

    目前拉下来的是matser最新代码,也有可能不稳定的,建议最好切换到稳定的tag

    git tag
    
    git checkout OpenSSL_1_1_1
    
    

    我这里选择的是OpenSSL_1_1_1 版本

  • 然后在androidopenssl上新建build_openssl_shell.sh文件进行编辑:

    #!/bin/bash
    set -e
    set -x
    
    SCRIPTPATH=.
    export ANDROID_NDK_HOME=/Users/dengqu/Downloads/android-ndk-r17c
    OPENSSL_DIR=$SCRIPTPATH/openssl
    
    CC=clang
    
    # 配置toolchains
    PATH=$ANDROID_NDK_HOME/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin:$PATH
    
    
    
    # 设置Android API,这里设置的是21,编译过了。当设置14的时候出现编译失败,其他的版本需要你们去尝试了
    ANDROID_API=21
    
    # 设置编译的目标库
    # 目标库的选项 android-arm, android-arm64, android-x86, android-x86 etc
    architecture=android-arm
    
    # 打开openssl文件夹,并创建make文件
    cd ${OPENSSL_DIR}
    ./Configure ${architecture} -D__ANDROID_API__=$ANDROID_API
    
    # 构建
    make
    
    # 拷贝到输出目录
    OUTPUT_INCLUDE=$SCRIPTPATH/output/include
    OUTPUT_LIB=$SCRIPTPATH/output/lib/${architecture}
    mkdir -p $OUTPUT_INCLUDE
    mkdir -p $OUTPUT_LIB
    cp -RL include/openssl $OUTPUT_INCLUDE
    cp libcrypto.so $OUTPUT_LIB
    cp libcrypto.a $OUTPUT_LIB
    cp libssl.so $OUTPUT_LIB
    cp libssl.a $OUTPUT_LIB
    
  • 然后更改build_openssl_shell.sh脚本的运行权限

    chmod a+x build_openssl_shell.sh
    
  • 这个时候目录结构如下:

    image.png

  • 运行脚本

       ./build_openssl_shell.sh
    

    如果顺利的话,会在openssl目录下生成output文件

    image.png

    其中include里面是头文件。 lib里面是动态库和静态库,看你需要使用哪种,就拷贝哪种到你的工程里面

  • 遇到的问题

    1. ndk系统路径找不到

    image.png 这个时候需要查看系统ndk路径是否配置了

    vim ~/.bash_profile  
    

    image.png

    source ~/.bash_profile 
    
    1. crypto/ec/ecp_nistz256-armv4.S:9: Error: unknown pseudo-op: `.rodata'

    image.png 解决办法是编辑ecp_nistz256-armv4.S文件,然后删除.rodata

    cd androidopenssl/openssl/crypto/ec
    vim ecp_nistz256-armv4.S
    

    然后找到.rodata,删除保存即可