【问题标题】:Difference between armeabi and armeabi-v7aarmeabi 和 armeabi-v7a 的区别
【发布时间】:2012-08-26 11:58:58
【问题描述】:

据我所知,Android NDK 中两种支持的 ARM 架构风格之间的区别仅在于支持的 CPU 指令集。真的是这样吗?调用约定、系统调用顺序或其他方面没有区别吗?

我想知道如果我将模块编译为 ARM 目标文件(使用 NDK 以外的编译器 - 特别是 Free Pascal),将 ARMv6 指定为架构,然后将其链接到 armeabi 和 armeabi-v7a 会发生什么共享库。 FPC 位不应该既不执行系统调用也不执行 Java 调用,除非通过我自己的基于 C 的接口。

编辑:hello world 库,使用 FPC for ARM 编译,链接并在 ARMv7a 模拟器下运行。

【问题讨论】:

  • “我想知道会发生什么”你可以试试 :) 不知道这是否可行,但 Internet suggests 有办法让 Free Pascal 代码在 Android 上运行。跨度>
  • 微妙的 EABI 不匹配之类的事情通常会在边缘情况下表现出来,而不是立即在您的脸上炸开。并且以 100% 为目标执行覆盖率测试并不是我会心甘情愿地进行的事情。

标签: android android-ndk cpu-architecture freepascal abi


【解决方案1】:

你绝对可以在 v7 上运行 armeabi 共享库,你可以从另一个模块调用它的导出函数。所以,为了安全起见,我会从你的 Pascal 代码中创建一个单独的 .so 文件,坚持使用 armeabi(可能使用一些 C/C++ 包装器),并将这个共享库与你的 armeabi 和 armeabi-v7a 库一起使用.以正确顺序加载所有内容的最简单方法是使用

System.loadLibrary("pascal"); // armeabi
System.loadLibrary("c++"); // the platform will choose armeabi or armeabi-v7a

【讨论】:

  • 牢记这个错误link,确定混合 armeabi 和 armeabi-v7a 可以正常工作吗?
  • @MarkCarter:我从未经历过这种情况。正如链接报告所暗示的那样,不幸的是,APK 安装程序无法正确地从 lib/armeabilib/armeabi-v7a 文件夹中获取库。我亲自见过他们中的一些人。但是,报告的问题看起来并没有彻底调查。这两个库是否都存在于设备上的 app-lib 文件夹中? nm -D 说明了哪些缺失的功能?
  • AFAICT,问题是当您有 2 个独立的库 A 和 B 时,其中 A6、A7、B6、B7 代表不同 ABI 的编译。但是,只有 A6 和 B7 由供应商提供。我经历过这个:第二个加载的lib不会加载。解决方法是将 A6(连同 B7)放在“armeabi-v7a”中,尽管我从未尝试过。我认为该链接表示此解决方法不再有效。一种不再有效的方法:(
  • @MarkCarter:这正是我要说的。在您的场景中,您应该有libs/armeabi/libA6.solibs/armeabi/libB6.solibs/armeabi-v7a/libA6.solibs/armeabi-v7a/libB6.so。如果您没有 libA6.so,那么您将无法在 arm6 上运行您的应用程序,并且根本不需要 libs/armeabi/。此解决方法仅解决安装程序问题。 link 并不能真正说服我,它缺少非常重要的细节。
猜你喜欢
  • 2011-09-09
  • 1970-01-01
  • 1970-01-01
  • 2019-11-11
  • 2019-11-25
  • 2014-12-08
  • 1970-01-01
  • 1970-01-01
  • 2020-11-04
相关资源
最近更新 更多