Android NDK 编译 libcurl支持https

news2024/12/28 19:04:39

最后在使用NDK中使用libcurl,由于不同的安卓设备,版本不一样;使用so时,会导致报错dlopen时找不到某函数或出错。

最后直接使用libcurl.a后,目前在几款盒子上测试均能正常工作。

libcurl需要支持https得提前编译两个库:

openssl, zlib。

1. 编译openssl

下载openssl-3.3.1 的sourcecode

下载源地址:

openssl github下载地址icon-default.png?t=N7T8https://github.com/openssl/openssl/releases/download/openssl-3.3.1/openssl-3.3.1.tar.gzam

解压后开始编译:

根目录有NOTES-ANDROID.md,里面有编译说明;如下:

export ANDROID_NDK_ROOT=/home/whoever/Android/android-sdk/ndk/20.0.5594570
    PATH=$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin:$ANDROID_NDK_ROOT/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin:$PATH
    ./Configure android-arm64 -D__ANDROID_API__=29
    make

请将其中的目录修改为自己对应的目录。

编译时遇到问题:error: unknown argument: '-gcc-toolchain'.

问题原因,新版本的llvm不支持-gcc-toolchain参数

原编译参数:

-gcc-toolchain $(ANDROID_NDK_ROOT)/toolchains/llvm/prebuilt/linux-x86_64

修改为:

--gcc-toolchain=$(ANDROID_NDK_ROOT)/toolchains/llvm/prebuilt/linux-x86_64

 可以开始编译openssl了。

由于我使用的了libssl.a静态库,编译完成后使用,会出现

relocation R_ARM_REL32 cannot be used against symbol 'OPENSSL_armcap_P

解决方案:

重新使用下面命令config,去掉汇编。

./Configure android-arm -D__ANDROID_API__=18 no-asm no-shared --prefix=/home/deng/H3_Android/android_lib

编译后没有问题。

2. 编译libcurl.a

直接使用cmake:

cmake .. \
  -DCMAKE_TOOLCHAIN_FILE=/home/deng/NDK/android-ndk-r25b/build/cmake/android.toolchain.cmake \
 -DANDROID_NDK=$ANDROID_NDK_HOME \
 -DANDROID_ABI=armeabi-v7a \
  -DCMAKE_BUILD_TYPE=Release \
  -DCMAKE_INSTALL_PREFIX==/home/deng/H3_Android/android_lib \
  -DANDROID_PLATFORM=android-18 \
  -DANDROID_TOOLCHAIN=clang \
  -DCURL_DISABLE_LDAP=ON \
  -DCURL_DISABLE_LDAPS=ON \
  -DCURL_DISABLE_FILE=ON \
  -DCURL_DISABLE_TELNET=ON \
  -DCURL_DISABLE_DICT=ON \
  -DCURL_DISABLE_TFTP=ON \
  -DCURL_DISABLE_POP3=ON \
  -DCURL_DISABLE_SMTP=ON \
  -DCURL_DISABLE_IMAP=ON \
  -DCURL_DISABLE_GOPHER=ON \
  -DENABLE_MANUAL=OFF \
  -DENABLE_UNIX_SOCKETS=OFF \
  -DENABLE_IPV6=OFF \
  -DBUILD_CURL_EXE=OFF \
  -DBUILD_SHARED_LIBS=ON \
  -DBUILD_TESTING=OFF \
  -DHTTP_ONLY=ON \
  -DENABLE_THREAD=OFF \
  -DENABLE_NTLM=OFF \
  -DENABLE_NTLM_WB=OFF \
  -DENABLE_SPNEGO=OFF \
  -DENABLE_KERBEROS=OFF 

CMake会遇到找不到openssl的问题,使用cmakegui将openssl对应的参数设置到刚才编译好后make install的位置。

可以开始编译了,注意如果编译64位需要在cmakegui里设置一下ANDOIRD_ABI为64位。

3. 编译zlib

        下载源代码:

        https://www.zlib.net/zlib-1.3.1.tar.gz

        编译

        直接使用CMake生成Makefile

 cmake    -DCMAKE_TOOLCHAIN_FILE=/home/deng/NDK/android-ndk-r25b/build/cmake/android.toolchain.cmake  -DANDROID_NDK=$ANDROID_NDK_HOME  -DANDROID_ABI=armeabi-v7a   -DCMAKE_BUILD_TYPE=Release   -DCMAKE_INSTALL_PREFIX==/home/deng/H3_Android/android_lib   -DANDROID_PLATFORM=android-18   -DANDROID_TOOLCHAIN=clang

    然后开始编译,基本没会遇到啥问题。

  后面可以生成对应的几个库,libcurl.a libssl.a, libcrypto.a libz.a。

  在应用程序中设置好参数,就可以支持https了。

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1960427.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LLM评估 | 大模型评估方法调研--论文解读(持续更新ing!!!)

目录 LLM-based NLG Evaluation: Current Status and ChallengesAdaptEval: Evaluating Large Language Models on Domain Adaptation for Text SummarizationThe Potential and Challenges of Evaluating **Attitudes, Opinions, and Values** in Large Language ModelsEvalLM…

揭秘高效语音转文字工具:让沟通更便捷

嘿,各位办公室的小伙伴们,今儿咱们来聊聊那些能让咱们文员生活大变样的神器——特别是那些能把咱们嘴里嘟囔的话儿,瞬间变成电脑里整整齐齐文字的语音转文字工具。说起来,自从有了这些宝贝,我感觉自己都快能飞起来了&a…

VUE 3.0 如何新建项目 详细教程 附环境搭建 推荐

本人新入手一台电脑,需要安装各种环境配置,顺便把过程记录一下,方便自己以后查看,也欢迎大家参考交流。 目录 一、环境搭建: 1.Node.js安装 2.国内淘宝镜像设置 3.安装vue 环境 二、新建vue项目 1.vue脚手架新建…

昇思25天学习打卡营第21天|FCN图像语义分割案例:从数据集下载到模型推理

目录 MindSpore 版本管理与数据集下载准备 图像分割数据集的定义、处理与获取 训练集数据的图像展示 基于 MindSpore 的 FCN8s 图像分割模型定义 图像分割模型的预训练模型加载与评估指标定义 基于 CPU 的 FCN8s 模型训练配置与准备 FCN8s 模型的权重加载与评估数据集的评…

大模型系列5--卷积神经网络

卷积神经网络 1. 背景2. 架构2.1. 卷积2.1.1. 单卷积层(多Channel输出)2.2.2. 多层卷积(卷积堆叠)2.2.3. 卷积关键参数2.2.4. 卷积常用计算公式 2.2. 池化层(pooling) 3. 经典网络结构3.1. VGG-163.2. ResN…

燃气安全无小事,一双专业劳保鞋让你步步安心!

燃气作为我们日常生活中不可或缺的能源之一,为我们的生活提供了极大便利,其安全性往往被忽视在忙碌的日常生活背后。然而,燃气事故一旦发生,后果往往不堪设想,轻则财产损失,重则危及生命。因此,…

【Linux】全志Tina配置AB区分区升级包

一、文件位置 V:\f1c100s\Evenurs\f1c100s\tina\target\allwinner\generic\configs\sw-subimgs-ab.cfg 二、文件内容 三、介绍 在第七行,可以设置产生的升级包是a区或是b区,使用ab区的名称来区分,ab区名称查询方法详见文章: …

angular入门基础教程(八)表单之双向绑定

绑定表单数据 为了让表单使用 Angular 的特性实现数据绑定,需要导入 FormsModule。 这个比 vue 要繁琐点,不复杂,但是比 react 的自己手动实现要方便,ng 帮我们实现了双向绑定 import { Component } from "angular/core&qu…

金蝶云星空历史库存信息批量计算生成

文章目录 金蝶云星空历史库存信息批量计算生成业务背景需求背景参考开发步骤创建单据《历史库存信息》界面表结构需要生成日期库存信息的日期范围存储为表创建日期表使用递归插入数据创建存储过程1,根据日期生成计算当日库存,生成《历史库存信息》创建存储过程2,根据日期范围…

Linux修炼之路之进程优先级,并行,环境变量

目录 一:进程优先级 二:并行并发 三:环境变量 接下来的日子会顺顺利利,万事胜意,生活明朗-----------林辞忧 一:进程优先级 1.基本概念 当使用ps -al指令时,就会显示用户所启动的所有进…

音视频入门基础:WAV专题(4)——FFmpeg源码中获取WAV文件音频压缩编码格式、采样频率、声道数量、采样位数、码率的实现

音视频入门基础:WAV专题系列文章: 音视频入门基础:WAV专题(1)——使用FFmpeg命令生成WAV音频文件 音视频入门基础:WAV专题(2)——WAV格式简介 音视频入门基础:WAV专题…

求职Leetcode题目(2)

1.柱状图中最大的矩形 据说这是2024年字节二面的题目,我感觉这道题跟接雨水有点类似,最重要的思路还是要找到什么时候能形成矩形的这么个情况,某个范围的矩形的高度,是由最短的柱形来决定的。 我们先整理一下,解决这道…

解决Firefox代理身份验证弹出窗口问题:C#和Selenium实战指南

引言 在使用Selenium和C#进行网页抓取时,遇到代理服务器的身份验证弹出窗口是一个常见的问题。这不仅会中断自动化流程,还会导致抓取任务失败。本文将提供一个实战指南,帮助开发者解决这个问题,并介绍如何在代码中设置代理IP、Us…

N32L406 移植MultiTimer教程 mdk5

MultiTimer 首先感谢开源作者 开源地址; github.com https://github.com/0x1abin/MultiTimer 简介 MultiTimer 是一个软件定时器扩展模块,可无限扩展你所需的定时器任务,取代传统的标志位判断方式, 更优雅更便捷地管理程序的…

C++学习笔记之指针高阶

数组名 数组名字是数组的首元素地址。 一个指针变量保存了数组元素的地址。我们就称之为数组元素指针,及数组指针。 数组指针的本质是指针,指向数组中的某个元素的地址。 由于数组名可以代表数组收元素地址,数组元素是可以通过 数组名[下标] 的格式访问, 那么可以定义一…

红酒行业新动态:抢先了解未来趋势

在风起云涌的红酒市场中,每一次变革都如同飓风般席卷整个行业。今日,我们一同探讨红酒行业的新动态,特别是定制红酒领域的未来趋势。让我们以洒派红酒(Bold & Generous)为引,洞察行业前沿,预…

60、redis安装和部署

一、关系型数据库与非关系型数据库 1.1、关系型数据库 关系型数据库是一个结构化的数据库,创建在关系模型(二维表格模型)基础上一般面向于记录。SQL语句(标准数据查询语言)就是一种基于关系型数据库的语言&#xff0…

2024-07学习笔记

1.${}取值 在这些属性源中,命令行参数和JVM系统属性拥有最高的优先级,它们可以覆盖在Properties文件中定义的属性。而操作系统环境变量和Properties文件的优先级相对较低,但是Spring会根据配置的不同情况进行属性的合并和覆盖,最终…

QUARKUS初体验

1.什么是QUARKUS? Quarkus是 Red Hat为GraalVM 和 HotSpot 量身定制用程序。特点是启动超快,内存极低,并且在容器编排平台(如Kubernetes)中提供了近乎即时的向上扩展和高密度的内存利用率。并且基于GraalVM&#xff0…

【YashanDB知识库】如何远程连接、使用YashanDB?

问题现象 在各个项目实施中,我们经常遇到客户、开发人员需要连接和使用YashanDB但不知如何操作的问题,本文旨在介绍远程连接、使用YashanDB的几种方式。 问题的风险及影响 无风险 问题影响的版本 历史版本~23.2 问题发生原因 无 解决方法及规避方…