gpt4 book ai didi

android - ARM64 可以在兼容模式下运行 ARM 程序集吗?

转载 作者:太空宇宙 更新时间:2023-11-03 13:40:54 36 4
gpt4 key购买 nike

这是一个第 3 方库,我无法访问它的源代码 - 要求他们为 ARM64 构建到目前为止没有任何效果,尽管他们声称 Android 8.0(仅 ARM64)将被“支持”。

以下 Java 代码在 armv7l 上运行, 但在 aarch64 上失败:

static {
switch(System.getProperty("os.arch")){
case "aarch64":
case "armv7l":
try {
System.loadLibrary("somelibrary");
} catch(UnsatisfiedLinkError e) {
Log.e(LOG_TAG, e.getMessage());
}
break;
}
}

dlopen failed: "/data/app/ ... /base.apk!/lib/arm64-v8a/somelibrary.so" is 32-bit instead of 64-bit.

看来,好像AArch32执行将是“可选的”(甚至可能不可用)——因为人们(很可能)必须将 CPU 从 AArch64 切换到至 AArch32执行。例如。此幻灯片涵盖主题:Linux on AArch64 ARM 64-bit Architecture .

问:有没有办法在 64 位 Android 设备上使用 32 位库?


事实证明,这不被 Google Play 接受 - 需要提供 ARM64 native 汇编。

最佳答案

您在智能手机中找到的任何 arm64 CPU 也应该能够运行 arm32 代码。

但是,至少需要满足三个要求:

  1. 您的流程不能混合使用 64 位和 32 位代码 -- 它必须是其中之一。
  2. 您(或您)的操作系统必须提供您链接到的所有动态库的 32 位版本。
  3. 您的操作系统内核必须支持 32 位进程;它将负责在您的进程使用 CPU 时切换执行模式。

3 号很好; Android 使用 Linux-like内核,支持 arm64 上的 arm32 进程。

2 号可能没问题;不知道大家从哪里听说Android 8.0只有64位的,但事实并非如此。设备制造商可以选择排除 32 位支持,但我不知道有哪家这样做了(因为这会阻止仅支持 32 位的旧版应用和游戏在他们的设备上运行)。

当然,在手机上同时提供 32 位和 64 位库意味着操作系统会占用更多的存储空间,因此将来绝对有可能只支持 64 位设备。任何 32 位游戏或应用程序都无法在这些设备上运行。

第 1 个是您的问题:您的应用作为 64 位进程运行,并试图加载 32 位库。这是行不通的。

解决方案是让您的应用仅支持 32 位。不过,如果你能避免这一切,我会建议不要使用它(即不要使用那个库)。您的应用无法在未来可能发布的任何仅 64 位设备上运行。

关于android - ARM64 可以在兼容模式下运行 ARM 程序集吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52234490/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com