当前位置: 首页 > 知识库问答 >
问题:

UnsatisfiedLinkError:armeabi编译库与ARM64-V8A兼容吗?

高皓
2023-03-14

我有一个libfoo.so库,我用它为我的旧Android系统构建armeabi。今天我正在构建新的架构ARM64-V8A,我在gradleABIFilters+='ARM64-V8A'中进行了正确的配置,并且我解压了我的apk,我可以在myapp.apk/lib/ARM64-V8A中找到我的libfoo.so库。我没有这个libfoo.so库的源代码,所以我使用了以前为armeabi构建的源代码。但我得到的错误如下:

<代码>2020-11-17 20:56:23.039 130 83-13556/?w/system.err:java.lang.unsatistifiedLinkError:dalvik.system.PathClassLoader[dexpathlist[[zip文件“/data/app/sg.com.aa.bb-1/base.apk”],nativelibrarydirectories=[/data/app/sg.com.aa.bb-1/lib/arm64,/data/app/sg.com.aa.bb-1/base.apk!/lib/arm64-v8a,/system/lib64,/vendor/lib64]]找不到“libfoo.so”

正如您可以看到的路径/data/app/sg.com.aa.bb-1/base.apk!/lib/arm64-v8a,我非常肯定我的libfoo.so文件在里面,但为什么它一直说could not find libfoo.so

我在文件libfoo.so上运行file命令,它显示:

ELF 32位LSB pie可执行ARM,EABI5版本1(SYSV),动态链接,interpreter/System/,剥离

以前也有人问过类似的问题,ARM64-V8A应该和这些32位库兼容,像这样。而这一点,它说64位设备也支持他们的32位变体。以arm64-v8a设备为例,该设备还可以运行armeabi和armeabi-v7a代码。但是请注意,如果应用程序以arm64-v8a为目标,而不是依赖于运行应用程序的armeabi-v7a版本的设备,则应用程序在64位设备上的性能会好得多。

在这种情况下,是否有其他可能导致上面的unsatisfiedlinkerror

结论:

我终于明白了@Jake意思,我对所谓的“ARM64-V8A也支持32位”有点困惑。是的,它确实支持,但前提是它以64位模式运行,而且一旦Android应用程序以64位模式启动,它就不能执行任何32位C库。所以我必须找到一种方法来强制应用程序在32位模式下运行。

共有1个答案

寿丰
2023-03-14
  • 某些ARMv8-A内核没有AARCH32模式。
  • aarch32函数只能在以aarch32模式运行的OS上调用
  • 您不能将AARCH32二进制文件与AARCH64二进制文件混合使用。
  • 体系结构不是ABI
  • AARCH32二进制文件仅在32位ABI上运行。
 类似资料:
  • 对于我的Android应用程序,我现在使用的是ABI“x86”和“armeabi”。armeabi用于所有ARM设备,包括armv7a和ARM64-V8A。

  • 我需要为一个Android arm64-v8a设备构建一个Qt应用程序。 这些设备应该能够运行QtCreator支持的armv7a二进制文件(请参见arm64-v8a是否与ARMEABI-V7a兼容?)。但是我在arm64-v8a上的应用程序在armeabi-v7a上工作时遇到了故障,所以我想直接为arm64-v8a构建应用程序并再次测试。 经过一些搜索,我最终尝试使用以下命令配置Qt(qt-ev

  • 根据文档,GraalVM项目中的本机映像编译器有一些动态代理的限制。既然Hibernate大量使用了代理,那么它在提前编译的项目中能正常工作吗? Quarkus项目似乎表明它可以,但我的理解主要是基于Reddit的一篇帖子说 Hibernate ORM现在即使编译为GraalVM本机映像也可以工作--只要确保使用Quarkus构建应用程序即可。 如果我不想(或者不会)使用夸克呢?是否可以使用使用H

  • 我正在尝试使用bazel为android for arm64-v8a构建libtensorflow_cc.so体系结构 需求 我试图为android for arm64-v8a架构构建'libtensorflow_cc.so'。我需要它在运行时通过C++在Android NDK中创建和训练一个模型文件。我能够在桌面上使用C++并借助'libtensorflow_cc.so'生成 bazel bui

  • 问题内容: 编译Xcode Project失败,并出现以下错误: “文件/ Users / * /Git/ocr/opencv2.framework/opencv2中缺少必需的体系结构arm64” 如果我将Architectures(在Build Settings下)更改为(armv7,armv7s)而不是(armv7,armv7s),它会很好地工作。 如何更改opencv python构建脚本,

  • 在stackoverflow中还没有讨论的情况下,我遇到了“不兼容类型”编译器错误(例如,为什么这个通用java代码不能编译?)。 我的期望很简单--我调用的是一个模板化方法,它不使用包含类的任何“泛型”类,因此它应该从方法参数中提取模板参数的类型,并且在所有情况下都应该编译--但我得到了“不兼容类型”编译器错误。 我注意到解决这个问题的奇怪方法--在方法参数中向泛型datatype添加“<?ex