美文网首页openSSL程序员
android Openssl编译 ---超简单版

android Openssl编译 ---超简单版

作者: 片片碎 | 来源:发表于2018-03-08 17:53 被阅读110次

    编译环境为:MacOS

    OpenSSL的源代码:各个版本的下载:https://www.openssl.org/source/old/

    编译步骤:和编译ffmpeg差不多:

    1)配置编译工具和platform:

    这个地址的:https://wiki.openssl.org/images/7/70/Setenv-android.sh

    中的Setenv-android.sh其实就只是配置编译工具和platform

    Andorid Studio NDK开发-编译OpenSSL类库 - 简书把这个脚本的使用介绍的很清楚

    2)configure裁剪

    下面是编译openssl-1.1.0g的一个脚本示范:源码和.sh脚本在同一级目录下即可

    3)./configure生成makeFile

          make执行makeFile且生产二进制文件

          make install 打包安装生成的二进制文件到prefix路径下

    脚本如下:

    #源码 文件夹名字 根据具体的修改

    SOURCE="openssl-1.1.0g" 

    #CPU架构

    ARCH=arm

    #编译工具和Platform设置

    if [ "$ARCH" = "arm" ]; then

    HOST=arm-linux-androideabi

        SYSROOT=$NDK_PATH/platforms/android-14/arch-arm  #platform路径,设置成你的路径

    EXFLAGS="-march=armv7-a -mfpu=neon -mfloat-abi=softfp -ffast-math"

    ARCHTARG=arm

    CROSS=arm-linux-androideabi

    HOSTNAME=arm

    COMPILER=android-armeabi 

    elif [ "$ARCH" = "arm64-v8a" ]; then

    HOST=aarch64-linux-android

    SYSROOT=$NDK_PATH/platforms/android-24/arch-arm64

    ARCHTARG=arm64

    CROSS=aarch64-linux-android

    HOSTNAME=aarch64

    COMPILER=android64-aarch64

    elif [ "$ARCH" = "x86" ]; then

    HOST=x86

    SYSROOT=$NDK_PATH/platforms/android-14/arch-x86

    ARCHTARG=x86

    CROSS=i686-linux-android

    HOSTNAME=x86

    COMPILER=android-x86

    elif [ "$ARCH" = "x86_64" ]; then

    HOST=x86_64

    SYSROOT=$NDK_PATH/platforms/android-24/arch-x86_64

    ARCHTARG=x86_64

    CROSS=x86_64-linux-android

    HOSTNAME=x86_64

    COMPILER=android64

    fi

    TOOLCHAIN=$NDK_PATH/toolchains/${HOST}-4.9/prebuilt/darwin-x86_64/bin/${CROSS} #编译工具路径 设置成你的路径

    #android_NDK

    export NDK_PATH

    #android_Platform

    export SYSROOT

    #android_tools

    export CC=${TOOLCHAIN}-gcc #c工具

    export CXX=${TOOLCHAIN}-g++ #c++工具

    export LD=${TOOLCHAIN}-ld #ld工具

    export STRIP=${TOOLCHAIN}-strip #strip工具

    export AR=${TOOLCHAIN}-ar #ar工具

    export NM=${TOOLCHAIN}-nm #nm工具

    export RANLIB=${TOOLCHAIN}-ranlib  # ranlib工具

    export CFLAGS="${CFLAGS} ${EXFLAGS}"

    cd "$SOURCE"

    #裁剪 根据具体需求进行裁剪  prefix修改成你的安装路径

    ./Configure $COMPILER no-shared \

    no-ssl2 \

    no-comp no-asm no-idea \

    no-hw no-engine no-dso \

    --prefix=/Users/feng/third-lib/openssl/android/${COMPILER} \

    --sysroot=${SYSROOT}

    #clean

    make clean

    #make

    make -j4

    #install安装

    make install

    详细说明:参考资料:《OpenSSLWIKI》

    1.COMPILER

    ./configure 里面一定要添加这个,否则会报错

    2.Configure & Config

    在mac OSx上编译,sh脚本里面写的只能是configure

    config编译报错,如下

    ar: crypto/x509v3/v3err.o: No such file or directory

    ar: crypto/x86_64cpuid.o: No such file or directory

    make[1]: *** [libcrypto.a] Error 1

    make: *** [all] Error 2

    Fengs-MacBook-Pro:2_openssl feng$

    但是查看编译选项必须是:./config --help

    ./configure --help报错,提示Unix-ish systems必须使用./config,如下:

    Fengs-MacBook-Pro:2_openssl feng$ cd openssl-1.1.0g

    Fengs-MacBook-Pro:openssl-1.1.0g feng$ ./configure --helpConfiguring OpenSSL version 1.1.0g (0x1010007fL) no-asan 

    ……

    NOTE: If in doubt, on Unix-ish systems use './config'.

    Fengs-MacBook-Pro:openssl-1.1.0g feng$

    3)Dependencies

    看到有的脚本,在make 之前有个make depend,depend的意思是编译依赖库。这个是非必须的。如果 OpenSSL 1.0.2 和低于这个版本的需要make之前make depend,即:

    ./Configure .......#configure自己配置 此处省略

    make clean

    make depend

    make -j4

    make install

    如果是OpenSSL 1.1.0和更高版本的是不需要的,只需要make之前clean就好,确保reconfig是最新的。即:

    ./Configure .......#configure自己配置 此处省略

    make clean

    make -j4

    make install

    2)Configure Options

    A)压缩库

    zlib                   #使用静态的zlib压缩库

    zlib-dynamic    #使用动态的zlib压缩

    no-zlib              #不使用zlib压缩功能

    B)多线程

    threads  #支持多线程的库,默认支持

    no-threads #不支持多线程的库

    C)动态连接库

    shared   #生成动态连接库  static静态库默认生成

    no-shared #不生成动态连接库

    D)汇编代码加快编译

    asm            #编译过程中使用汇编代码加快编译过程

    no-asm      #编译过程中不使用汇编代码加快编译过程

    E)SSE2指令集加速。如果你的CPU支持SSE2指令集,就可以打开,否则就要关闭

    enable-sse2   #启用SSE2

    no-sse2          #禁用SSE2

    F)GMP库

    gmp          #  启用GMP库

    no-gmp    #禁用GMP库

    G)X509v3证书的IP地址扩展

    rfc3779         #启用X509v3证书的IP地址扩展

    no-rfc3779   #禁用X509v3证书的IP地址扩展

    H)Kerberos 5 支持

    krb5        #启用Kerberos 5 支持

    no-krb5  #禁用Kerberos 5 支持

    I)SSL(包含了SSL2/SSL3) TLS 协议支持  

    ssl          # 启用ssl

    no-ssl   # 禁用ssl

    ssl2       # 启用ssl2

    no-ssl2    # 禁用ssl2

    ssl3        # 启用ssl3

    no-ssl3   # 禁用ssl3

    tls           # 启用xls

    no-tls     # 禁用xls

    https的加密请求就需要启用ssl和tls

    J)调用其它动态链接库的功能

    dso       #启用

    no-dso #禁用

    [提示]no-dso仅在no-shared的前提下可用。

    K)调试模式

    -d  

    默认是禁用的,没有使用no -O3 or similar和libefence,如果需要使用调试模式,需要使用apt-get install electric-fence 或者使用yams 安装 brew install electric-fence

    L)

    enable-ec_nistp_64_gcc_128 #当GCC支持__uint128_t时,在小的endian平台上使用。ECDH的速度快2到4倍。默认情况下不启用,因为Configure无法确定它。如果您的编译器定义了__SIZEOF_INT128__,则CPU是小的endian,它可以容忍未对齐的数据访问

    enable-capieng  #windows平台上使用

    no-hw #禁用硬件支持,移动设备一定要加上 iOS/android

    no-engine #禁用硬件支持,移动设备一定要加上 iOS/android

    no-dtls     # 在OpenSSL 1.1.0 和以上版本禁用dtls

    no-dtls1   # 在OpenSSL 1.0.2 和以下版本禁用dtls1

    M)禁用选项

            a)摘要算法

            no-md2,no-md4,no-mdc2,no-ripemd

            b)对称加密算法

            no-des,no-rc2,no-rc4,no-rc5,no-idea,no-bf,no-cast,no-camellia

            c)不对称加密算法

            no-ec,no-dsa,no-ecdsa,no-dh,no-ecdh

            d)数据压缩算法

            no-comp

            P)对象存储功能

            no-store

    4)PREFIX and OPENSSLDIR

    这两个参数 都是安装路径射者,但OpenSSL 1.0.2 and below,和OpenSSL 1.1.0 and above版本是有区别的

    OpenSSL 1.0.2 and below

    通常没必要指定 --prefix,没有指定--prefix会使用--openssl,如果都--openssl也没有指定,会使用默认路径:/usr/local/ssl

    最好指定安装路径

    OpenSSL 1.1.0 and above

    这个版本wiki上说最好--prefix 和 --openssl两个都指定,默认使用/usr/local/ssl

    但是我只指定了--prefix,好像也没有什么

    5)OPENSSL_init_ssl 和 SSL_library_init

    初始化ssl

    OpenSSL 1.0.2 and below使用的是SSL_library_init

    OpenSSL 1.1.0 and above之后是没有SSL_library_init这个函数而是使用OPENSSL_init_ssl

    所以当ffmpeg链接OpenSSL时要特别注意,可以参考我另外一篇文章:

    ffmpeg链接第三方库OpenSSL问题“ERROR: openssl not found”

    相关文章

      网友评论

        本文标题:android Openssl编译 ---超简单版

        本文链接:https://www.haomeiwen.com/subject/fpiefftx.html