You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Android32设备加载OpenSSL遇非法指令错误(Delphi11+Indy10)

解决Delphi 11 + Indy 10在Android 8.1 32位环境加载OpenSSL的非法指令错误

问题根源分析

Illegal instruction (4)错误本质是OpenSSL库编译时使用了联想TB-X304F平板32位CPU不支持的指令集扩展(比如NEON或特定ARMv7进阶指令)。你当前使用的OpenSSL 1.0.2g/1.0.0版本,大概率是基于更高指令集编译的,导致在该设备32位环境下无法兼容。

具体解决方案

1. 重新编译适配基础ARMv7架构的OpenSSL库

针对OpenSSL 1.0.2系列(Indy 10兼容性较好),编译时指定基础ARMv7目标,禁用NEON等扩展指令:

./Configure android-armv7 no-neon no-asm shared --prefix=/你的输出路径

编译完成后,将生成的32位libcrypto.so、libssl.so替换现有库文件。

2. 升级到兼容的OpenSSL新版本

改用OpenSSL 1.1.1系列(长期支持,符合Play Store安全要求),编译时同样指定基础ARM架构:

./Configure android-arm no-asm shared --prefix=/你的输出路径

注:Delphi 11配套的Indy 10版本已适配OpenSSL 1.1.1,若你的Indy版本较旧,需更新到最新稳定版。

3. 优化Indy库加载逻辑

确保IdOpenSSLSetLibPath()指向对应架构的库路径,避免混加载:

var
  Arch: string;
begin
  case TOSVersion.Architecture of
    arARM32: IdOpenSSLSetLibPath('/assets/lib/arm32');
    arARM64: IdOpenSSLSetLibPath('/assets/lib/arm64');
  end;
end;

4. 确认设备CPU指令集

可通过读取Android设备的/proc/cpuinfo文件,查看该平板32位CPU支持的指令集列表,确保编译OpenSSL时禁用了所有设备不支持的扩展指令。

关键注意事项

  • 提交Play Store的版本必须分别提供适配32位、64位的独立OpenSSL库,不能混用。
  • OpenSSL 1.0.0/1.0.2系列已停止官方支持,建议升级到1.1.1系列以满足Play Store的安全合规要求。

内容的提问来源于stack exchange,提问作者David U

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 03:05:19