在Ubuntu系统上为Android交叉编译OpenSSL
在Ubuntu系统上为Android交叉编译OpenSSL以OpenSSL 3.5.7为例需要配置好Android NDK环境并使用OpenSSL自带的配置脚本进行编译。选取OpenSSL版本可以在官网查看https://openssl-library.org/source/建议选择带有LTS标识的版本为长期支持版。在windows系统上配置Ubuntu系统虚拟机步骤详见上一篇文章本文不再赘述。以下是具体的步骤和示例脚本。1. 准备工作首先更新Ubuntu系统的软件包列表并安装必要的构建工具sudoaptupdatesudoaptinstall-ybuild-essentialwgettarunzipmakeclang2. 下载并配置 Android NDKOpenSSL的交叉编译需要用到Android NDK。建议使用稳定版本例如 NDK r25c 或 r26b。1. 下载 NDK以 r25c 为例cd~wgethttps://dl.google.com/android/repository/android-ndk-r25c-linux.zip2. 解压 NDKunzipandroid-ndk-r25c-linux.zip3. 设置环境变量你可以将其记录在临时变量中或者写入~/.bashrcexportANDROID_NDK_HOME$HOME/android-ndk-r25cexportANDROID_NDK_ROOT$ANDROID_NDK_HOMEexportPATH$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH永久写入环境变量具体操作步骤如下步骤 1使用 nano 打开~/.bashrc文件在终端中输入以下命令nano~/.bashrc步骤 2将环境变量添加到文件末尾使用键盘上的下方向键一直滑到文件的最底部然后在文件的最末尾粘贴以下内容# Android NDK environment variablesexportANDROID_NDK_HOME$HOME/android-ndk-r25cexportANDROID_NDK_ROOT$ANDROID_NDK_HOMEexportPATH$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH步骤 3保存并退出按Ctrl O保存。按Enter确认文件名。按Ctrl X退出nano编辑器。步骤 4使配置立即生效在当前终端运行以下命令使刚刚修改的配置立即生效不需要重启电脑或重新打开终端source~/.bashrc验证是否成功你可以运行以下命令来验证环境变量是否已正确配置echo$ANDROID_NDK_HOME如果终端正确输出了/home/你的用户名/android-ndk-r25c或者你的实际 NDK 路径说明配置已经永久生效。今后每次你打开新的终端窗口这些变量都会自动加载。3. 下载 OpenSSL 源码本文以 OpenSSL 3.5.7 (长期支持版本 LTS) 为例。cd~wgethttps://www.openssl.org/source/openssl-3.5.7.tar.gztar-zxvfopenssl-3.5.7.tar.gzcdopenssl-3.5.74. 编写编译脚本由于Android有不同的架构如arm64-v8a,armeabi-v7a,x86_64,x86编写一个自动化脚本可以方便地为这些架构生成预编译库。在openssl-3.5.7目录下创建一个名为build_android.sh的脚本nanobuild_android.sh将以下内容复制到脚本中#!/bin/bash# 1. 显式指定你的 NDK 路径请确保该路径与你实际解压的 NDK 路径一致exportANDROID_NDK_ROOT$HOME/android-ndk-r25cexportANDROID_NDK_HOME$ANDROID_NDK_ROOT# 检查 NDK 路径是否存在if[!-d$ANDROID_NDK_ROOT];thenechoError: NDK directory not found at$ANDROID_NDK_ROOTechoPlease check your NDK path in this script.exit1fi# 定义支持的架构和对应的OpenSSL配置名称ARCHS(arm64-v8aandroid-arm6421armeabi-v7aandroid-arm21x86_64android-x86_6421x86android-x8621)# 获取当前工作目录SRC_DIR$(pwd)# 定义输出目录OUTPUT_DIR${SRC_DIR}/android_build# 将 NDK 工具链加入 PATHexportPATH$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH# 循环编译各个架构for((i0;i${#ARCHS[]};i3));doABI${ARCHS[i]}TARGET${ARCHS[i1]}API${ARCHS[i2]}echoechoBuilding OpenSSL for${ABI}(API${API})...echo# 清理之前的编译残留makeclean2/dev/null# 创建输出路径PREFIX${OUTPUT_DIR}/${ABI}mkdir-p${PREFIX}# 配置 OpenSSL./Configure${TARGET}\-D__ANDROID_API__${API}\--prefix${PREFIX}\--openssldir${PREFIX}/ssl\no-shared\no-tests# 编译并安装make-j$(nproc)makeinstall_swdoneechoBuild completed. Outputs are located in:${OUTPUT_DIR}5. 执行编译1. 给脚本赋予执行权限chmodx build_android.sh2. 运行脚本./build_android.sh6. 查看编译结果编译完成后预编译的文件会输出在openssl-3.5.7/android_build目录下。目录结构大致如下android_build/ ├── arm64-v8a │ ├── bin │ ├── include │ │ └── openssl │ └── lib │ ├── libcrypto.a │ └── libssl.a ├── armeabi-v7a │ ...include/openssl存放头文件在 Android 项目如 CMake中配置target_include_directories时会用到。lib存放生成的静态库libcrypto.a和libssl.a。如果在脚本配置中去掉了no-shared此处还会生成libcrypto.so和libssl.so。验证生成的文件你可以运行以下命令来查看生成的预编译库文件结构ls-l/home/openclaw/openssl-3.5.7/android_build你应该会看到生成了 4 个对应 Android 架构的文件夹。接着你可以检查具体某个架构下的库文件是否存在例如arm64-v8als-l/home/openclaw/openssl-3.5.7/android_build/arm64-v8a/lib/如果在这个lib文件夹下看到了libcrypto.a和libssl.a说明这些就是你所需要的 Android 预编译静态库。注意事项API Level: 脚本中设置的__ANDROID_API__为21。如果你的应用需要支持更旧的设备或者需要使用更新的系统特性可以根据实际需求调整该值例如24、26等。动态库与静态库:默认脚本中开启了no-shared这会生成静态库 (.a)。静态库便于打包不易产生动态链接冲突。如果需要动态库 (.so)请从脚本的./Configure命令中移除no-shared行。

相关新闻

商品条码查询API实战:免费接口申请到代码集成全攻略

商品条码查询API实战:免费接口申请到代码集成全攻略

一、为什么需要商品条码查询API? 商品条码(如EAN-13、UPC-A)是商品流通的“身份证”,通过扫描条码即可获取商品名称、品牌、规格、价格等信息。对于电商平台、库存管理系统、零售POS机等场景,集成条码查询API能大幅提升…

2026/7/5 3:31:35阅读更多 →
magnetW:一款高效的跨平台磁力链接聚合搜索工具完全指南

magnetW:一款高效的跨平台磁力链接聚合搜索工具完全指南

magnetW:一款高效的跨平台磁力链接聚合搜索工具完全指南 【免费下载链接】magnetW [已失效,不再维护] 项目地址: https://gitcode.com/gh_mirrors/ma/magnetW 你是否曾经为了寻找一个资源而在多个磁力链接网站之间来回切换?是否希望有…

2026/7/5 3:31:35阅读更多 →
我现在有一些工具类,我应该不应该做自己的框架?

我现在有一些工具类,我应该不应该做自己的框架?

那框架完全是废物吗?非也。能产生这种东西,就表明它必定有它自己的用途。我们有一个业务,这个业务有它自己的模型、规则、流程等等。但是有些不确定的东西会未来才接进来,那么我们就非得有一个框架不可:比如图形界面就…

2026/7/5 3:31:35阅读更多 →
LitCAD:15分钟从零基础到二维CAD绘图高手

LitCAD:15分钟从零基础到二维CAD绘图高手

LitCAD:15分钟从零基础到二维CAD绘图高手 【免费下载链接】LitCAD A very simple CAD developed by C#. 项目地址: https://gitcode.com/gh_mirrors/li/LitCAD 想要掌握专业级的CAD绘图技能,却担心软件复杂、学习曲线陡峭?LitCAD正是为…

2026/7/5 4:51:39阅读更多 →
LangGraph快速入门与底层原理剖析

LangGraph快速入门与底层原理剖析

LangGraph 以图的方式构建语言代理 官方文档地址:https://langchain-ai.github.io/langgraph/ LangGraph 是一个用于构建具有 LLMs 的有状态、多角色应用程序的库,用于创建代理和多代理工作流。与其他 LLM 框架相比,它提供了以下核心优势&…

2026/7/5 4:51:39阅读更多 →
如何在Apple Silicon Mac上轻松运行Windows应用:Whisky终极指南

如何在Apple Silicon Mac上轻松运行Windows应用:Whisky终极指南

如何在Apple Silicon Mac上轻松运行Windows应用:Whisky终极指南 【免费下载链接】Whisky A modern Wine wrapper for macOS built with SwiftUI 项目地址: https://gitcode.com/gh_mirrors/wh/Whisky 想在Apple Silicon Mac上无缝运行Windows软件和游戏吗&am…

2026/7/5 4:51:39阅读更多 →
终极NBT编辑指南:3分钟掌握Minecraft数据修改秘籍

终极NBT编辑指南:3分钟掌握Minecraft数据修改秘籍

终极NBT编辑指南:3分钟掌握Minecraft数据修改秘籍 【免费下载链接】NBTExplorer A graphical NBT editor for all Minecraft NBT data sources 项目地址: https://gitcode.com/gh_mirrors/nb/NBTExplorer 你是否曾因《我的世界》游戏存档损坏而束手无策&…

2026/7/5 4:51:39阅读更多 →
3分钟掌握PyInstaller打包文件提取:新手终极指南 [特殊字符]

3分钟掌握PyInstaller打包文件提取:新手终极指南 [特殊字符]

3分钟掌握PyInstaller打包文件提取:新手终极指南 🚀 【免费下载链接】pyinstxtractor PyInstaller Extractor 项目地址: https://gitcode.com/gh_mirrors/py/pyinstxtractor 你是否曾面对一个PyInstaller打包的EXE文件,却无法查看其中…

2026/7/5 4:51:39阅读更多 →
图像频域滤波实战:3步实现基于2D-FFT的高斯低通与高通滤波

图像频域滤波实战:3步实现基于2D-FFT的高斯低通与高通滤波

图像频域滤波实战:3步实现基于2D-FFT的高斯低通与高通滤波 1. 频域滤波的核心原理 当你第一次看到图像的频域表示时,可能会觉得那些对称的亮斑和条纹像某种抽象艺术。但正是这些看似神秘的图案,蕴含着图像处理的强大力量。频域滤波的核心思想…

2026/7/5 4:46:38阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/5 0:01:08阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/5 0:01:08阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/5 0:01:08阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/5 0:01:08阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/5 0:01:08阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/5 0:01:08阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/5 1:30:27阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/5 3:48:10阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/5 3:48:09阅读更多 →