android Openssl编译 ---超简单版

编译环境为: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路径下


android Openssl编译 ---超简单版_第1张图片

脚本如下:

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

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编译 ---超简单版)