Android NDK r10 b 32位或64位或同时使用编译以及如何实现它

Android NDK r10 b 32位或64位或同时使用编译以及如何实现它,android,android-studio,android-ndk,openvpn,ndk-build,Android,Android Studio,Android Ndk,Openvpn,Ndk Build,当我使用r10b 64位构建器编译a时,它编译得很好,没有任何问题 我能够在棒棒糖中成功地运行该项目,应用程序按预期运行 但是当我在运行时在JellyBean中运行该项目时,我得到了以下结果 错误 无法加载所需的库“libopenvpn.so” “/data/data/de.blinkt.openvpn/cache/pievpn.armeabi-v7a”;引起 soinfo_重新定位(linker.cpp:987):找不到符号“srandom” 被“libopenvpn.so”引用…无法链接可执

当我使用r10b 64位构建器编译a时,它编译得很好,没有任何问题

我能够在棒棒糖中成功地运行该项目,应用程序按预期运行

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

无法加载所需的库“libopenvpn.so” “/data/data/de.blinkt.openvpn/cache/pievpn.armeabi-v7a”;引起 soinfo_重新定位(linker.cpp:987):找不到符号“srandom” 被“libopenvpn.so”引用…无法链接可执行文件

所以,当我研究它时,我认为它是由于使用64位构建器,解决方案是使用32位构建器

当我使用32生成器时,在编译过程中会出现以下错误

Android NDK:NDK应用程序“本地”目标未知ABI:arm64-v8a x86_64 Android NDK:请修复中的应用程序ABI定义 /jni/Application.mk
/Users/ShajilShocker/Documents/Android/NDK/Android-NDK-r10b/build/core/setup app.mk:112: ***Android NDK:正在中止。停下来

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

我是否可以先使用32位(注释64个体系结构)编译同一个项目,然后使用64位(取消注释64个体系结构)编译并在这两个版本上运行

非常感谢您的帮助

谢谢

运行棒棒糖的64位ARM和X86设备(不确定MIPS)可以执行32位或64位本机代码(ARMv7a/ARMv8和X86/X64)。Android允许您将具有多个ABI(CPU特定代码)的本机代码库绑定到APK中。这些也被称为“胖”二进制文件。例如,要构建同时包含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
ifeq($(目标),armeabi-v7a)
恩迪夫
ifeq($(目标值),arm64-v8a)
恩迪夫

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

根据官方文档,您至少应该使用NDK修订版10c来支持64位系统。

您链接的问题已经解决了这一问题,然而,提问者没有选择最佳答案——请参阅Michael的答案,指出目标Android版本的重要性。那么,你建议我使用32位NDK builder并进行更改吗?@Shajo你需要决定如何构建并更改Application.mk和Android.mk。你的问题意味着你不清楚它是如何工作的。您可以选择要包含在应用程序中的ABI,并为每个ABI构建单独的对象库。ANT工具将它们绑定到一个APK中。我正在考虑从application.mk
APP_ABI:=arm64-v8a armeabi-v7a mips x86 x86_64
中省略
arm64-v8a
x86_64
,如果您不想专门针对64位进行优化,只想为64位进行构建,那么我只希望该应用程序在64位设备上也不会出现故障ARMv7a和x86,它将在32位和64位设备上工作,因此应该适合您的需要。如果32位二进制文件不能在64位设备上运行,那么最近购买Galaxy S6或HTC M9的所有人都会非常不安。