- 准备编译脚本
到 https://github.com/leenjewel/openssl_for_ios_and_android/tree/20170105 下载别人写好的编译环境配置脚本
编译执行:
./build-openssl4android.sh android # for armeabi
./build-openssl4android.sh android-armeabi #for armeabi-v7a
./build-openssl4android.sh android64-aarch64 #for arm64_v8a
./build-openssl4android.sh android-x86 #for x86
./build-openssl4android.sh android64 #for x86_64
./build-openssl4android.sh mips #for mips
./build-openssl4android.sh mips64 #for mips64
build-openssl4android.sh 中,默认的OpenSSL 版本是 openssl-1.1.0f,改成最新的即可。
LIB_NAME=“openssl-1.1.0f”
脚本会自动下载 openssl 1.1.1e,需要有curl
默认只编译静态库,如果想要动态库,修改下面这里,删掉 no-shared \
./Configure $ARCH \
--prefix=${LIB_DEST_DIR}/${ABI} \
--with-zlib-include=$SYSROOT/usr/include \
--with-zlib-lib=$SYSROOT/usr/lib \
zlib \
no-asm \
no-shared \
no-unit-test
2.配置NDK
下载android-ndk-r13b,高版本的编译不通过
修改环境变量
sudo vim /etc/profile
export ANDROID_NDK=/home/zzz/ndk-bundle
3 错误解决
错误一:
lib/armeabi-v7a/libcrypto.a(ui_openssl.o):ui_openssl.c:function read_string_inner: error: undefined reference to ‘signal’
lib/armeabi-v7a/libcrypto.a(ui_openssl.o):ui_openssl.c:function read_string_inner: error: undefined reference to ‘tcsetattr’
lib/armeabi-v7a/libcrypto.a(ui_openssl.o):ui_openssl.c:function read_string_inner: error: undefined reference to ‘tcsetattr’
lib/armeabi-v7a/libcrypto.a(ui_openssl.o):ui_openssl.c:function open_console: error: undefined reference to ‘tcgetattr’
关于
这个问题的讨论在这里
https://github.com/openssl/openssl/issues/3826
https://blog.csdn.net/lllkey/article/details/82117026
打开 NDK 路径中 ndk-bundle/build/tools/make-standalone-toolchain.sh,找到
run python `dirname $0`/make_standalone_toolchain.py \
--arch $ARCH $PLATFORM_ARG --stl $STL $INSTALL_ARG $FORCE_ARG
在结尾加上一句 –deprecated-headers
run python
dirname $0
/make_standalone_toolchain.py
–arch $ARCH $PLATFORM_ARG --stl $STL $INSTALL_ARG $FORCE_ARG --deprecated-headers
如果无效:在CFLAGS中添加:-D__ANDROID_API__=19
如果还不行:
export ANDROID_NDK_HOME=/opt/android-ndk
"$ANDROID_NDK_HOME/build/tools/make_standalone_toolchain.py" --arch $ARCH --api $API --install-dir "$TOOLCHAIN_DIR" --force
$API and $ARCH are 14 for arm, 21 for arm64, 21 for x86_64 and 14 for x86.
错误二:
cxx-stl/llvm-libc /include/stdexcept:136: error: undefined reference to 'std::logic_error::logic_error(char const*)'
在build.gradle的cmake中的参数添加:arguments “-DANDROID_STL=c++_static”
externalNativeBuild {
cmake {
cppFlags "-std=c++11 -frtti -fexceptions"
arguments "-DANDROID_STL=c++_static"
}
}
ndk{
abiFilters "arm64-v8a", "armeabi-v7a"
}
如果使用ndk
Application.mk中天津爱 APP_STL := c++_static