gpt4 book ai didi

android - NDK r10 b 32 位或 64 位或使用两者编译以及如何实现

转载 作者:太空宇宙 更新时间:2023-11-03 12:32:19 29 4
gpt4 key购买 nike

当我 ndk 编译 project使用 r10b 64 位构建器,它编译良好,没有任何问题

我能够在 Lollipop 中成功运行该项目并且应用程序按预期运行

但是当我在运行时在 JellyBean 中运行该项目时,我得到以下信息错误

could not load library "libopenvpn.so" needed by "/data/data/de.blinkt.openvpn/cache/pievpn.armeabi-v7a"; caused by soinfo_relocate(linker.cpp:987): cannot locate symbol "srandom" referenced by "libopenvpn.so"...CANNOT LINK EXECUTABLE

所以当我研究时,我 found由于使用 64 位生成器,解决方案是使用 32 位生成器。

当我使用 32 builder 时,我在编译过程中遇到了以下错误。

Android NDK: NDK Application 'local' targets unknown ABI(s): arm64-v8a x86_64 Android NDK: Please fix the APP_ABI definition in ./jni/Application.mk
/Users/ShajilShocker/Documents/Android/NDK/android-ndk-r10b/build/core/setup-app.mk:112: *** Android NDK: Aborting . Stop.

所以如果我省略 arm64-v8a 和 x86_64 那么它可能会编译但它似乎不会在 64 位设备上运行。

我是否可以先使用 32 位(注释 64 架构)编译同一个项目,然后使用 64 位(取消注释 64 架构)编译,然后在两者上运行。

非常感谢任何帮助!

谢谢!

最佳答案

运行 Lollipop 的 64 位 ARM 和 X86 设备(不确定 MIPS)可以执行 32 位或 64 位 native 代码(ARMv7a/ARMv8 和 X86/X64)。 Android 允许您将具有多个 ABI(特定于 CPU 的代码)的 native 代码库绑定(bind)到一个 APK 中。这些也称为“FAT”二进制文件。例如,要构建包含 ARMv7a 和 ARMv8 代码的 FAT 二进制文件,请将以下行添加到您的 Application.mk 文件中:

APP_ABI := arm64-v8a armeabi-v7a

然后,在您的 Android.mk 文件中,您可以为每种 CPU 类型添加特定设置:

ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
<your custom ARM 32-bit build instructions here>
endif

ifeq ($(TARGET_ARCH_ABI),arm64-v8a)
<your custom ARM 64-bit build instructions here>
endif

当您在 32 位系统上运行包含 32 位和 64 位代码的胖二进制文件时,它将加载 32 位代码,反之亦然。不需要在每个目标设备的代码中有条件地编译。这就是 fat 二进制文件的用途 - 系统自动加载适合目标架构的库。

关于android - NDK r10 b 32 位或 64 位或使用两者编译以及如何实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29883257/

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