使用clang编译openssl1.1.1d
openssl下载地址
https://www.openssl.org/source/openssl-1.1.1d.tar.gz
ndk要使用r19以上
ndk各个 版本的下载地址
https://blog.csdn.net/u011077027/article/details/102706283
使用clang编译 要设置ANDROID_API>=21,配置ndk的路径,如果需要编译其他平台的,只需要修改architecture的值
shell脚本
#!/bin/bash
set -e
set -x
# Set directory
SCRIPTPATH=/root/openssl
export ANDROID_NDK_HOME=/root/android/android-ndk-r20
export OPENSSL_DIR=/root/openssl/openssl-1.1.1d
# Find the toolchain for your build machine
toolchains_path=${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64
# Configure the OpenSSL environment, refer to NOTES.ANDROID in OPENSSL_DIR
# Set compiler clang, instead of gcc by default
CC=clang
# Add toolchains bin directory to PATH
PATH=$toolchains_path/bin:$PATH
# Set the Android API levels
ANDROID_API=21
# Set the target architecture
# Can be android-arm, android-arm64, android-x86, android-x86 etc
outdir=armeabi-v7a
architecture=android-arm
# Create the make file
cd ${OPENSSL_DIR}
make clean
./Configure ${architecture} -D__ANDROID_API__=$ANDROID_API
#./config no-ssl2 no-ssl3 no-comp no-hw no-engine \
#--openssldir=$(pwd)/../out/$ANDROID_API \
#--prefix=$(pwd)/../out/$ANDROID_API
# Build
make
# Copy the outputs
OUTPUT_INCLUDE=$SCRIPTPATH/output/include
OUTPUT_LIB=$SCRIPTPATH/output/lib/${outdir}
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
参数定义
安装参数:
--openssldir=OPENSSLDIR
安装目录,默认是 /usr/local/ssl
--prefix=PREFIX
设置 lib include bin 目录的前缀,默认为 OPENSSLDIR 目录。
--install_prefix=DESTDIR
设置安装时以此目录作为"根"目录,通常用于打包,默认为空。
zlib
zlib-dynamic
no-zlib
使用静态的zlib压缩库、使用动态的zlib压缩库、不使用zlib压缩功能。
threads
no-threads
是否编译支持多线程的库。默认支持。
shared
no-shared
是否生成动态连接库。
asm
no-asm
是否在编译过程中使用汇编代码加快编译过程。
enable-sse2
no-sse2
启用/禁用SSE2指令集加速。如果你的CPU支持SSE2指令集,就可以打开,否则就要关闭。
gmp
no-gmp
启用/禁用GMP库
rfc3779
no-rfc3779
启用/禁用实现X509v3证书的IP地址扩展
krb5
no-krb5
启用/禁用 Kerberos 5 支持
ssl
no-ssl
ssl2
ssl3
no-ssl2
no-ssl3
tls
no-tls
启用/禁用 SSL(包含了SSL2/SSL3) TLS 协议支持。
dso
no-dso
启用/禁用调用其它动态链接库的功能。[提示]no-dso仅在no-shared的前提下可用。