Openssl android编译静态库

  1. 准备编译脚本
    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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Android 平台上编译 OpenSSL 静态库,需要进行以下步骤: 1. 安装 Android NDK:下载并安装最新Android NDK,然后将其路径添加到环境变量中。 2. 下载 OpenSSL 源代码:从 OpenSSL 官网上下载最新的源代码包,并解压到本地。 3. 配置交叉编译环境:在 OpenSSL 的源代码根目录下,创建一个名为 `setenv-android.sh` 的文件,并将以下内容复制到文件中: ```bash export ANDROID_NDK=/path/to/ndk export API_LEVEL=android-21 export TOOLCHAIN=$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64 export SYSROOT=$ANDROID_NDK/sysroot export PATH=$TOOLCHAIN/bin:$PATH export CC=armv7a-linux-androideabi$API_LEVEL-clang export CXX=armv7a-linux-androideabi$API_LEVEL-clang++ export AR=llvm-ar export LD=ld.lld export RANLIB=llvm-ranlib export NM=llvm-nm ``` 修改 `ANDROID_NDK` 的值为你本地的 NDK 路径,`API_LEVEL` 的值为你想要编译Android API 本。 4. 执行交叉编译环境配置脚本:在 OpenSSL 的源代码根目录下执行以下命令: ```bash source setenv-android.sh ``` 这会将交叉编译环境配置到当前的 shell 会话中。 5. 配置 OpenSSL 编译选项:在 OpenSSL 的源代码根目录下,执行以下命令: ```bash ./Configure android-armv7 --prefix=/path/to/output/directory ``` 修改 `--prefix` 的值为你想要输出静态库的目录路径。 6. 编译静态库:在 OpenSSL 的源代码根目录下,执行以下命令: ```bash make && make install ``` 这会编译 OpenSSL 静态库,并将其安装到指定的输出目录中。 7. 将静态库集成到 Android 项目中:将编译好的 OpenSSL 静态库拷贝到你的 Android 项目中,并在 `Android.mk` 文件中添加编译选项,以链接 OpenSSL 静态库。 以上是在 Android 平台上编译 OpenSSL 静态库的基本步骤,不同本的 OpenSSL 可能需要微调。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值