【发布时间】:2015-05-13 13:54:15
【问题描述】:
我正在通过以下方式加载我的原生库:
try {
System.loadLibrary("myNative");
} catch (UnsatisfiedLinkError e) {
//java.lang.UnsatisfiedLinkError here
System.load("/data/data/com.my.app/my_native/libmyNative.so");
}
上述代码在除 Android 5.0 Lollipop 之外的其他设备上运行良好。在 Android 5.0 Lollipop 设备上运行时,我经常收到以下错误:
java.lang.UnsatisfiedLinkError: dlopen failed: "/data/data/com.my.app/my_native/libmyNative.so" is 32-bit instead of 64-bit
at java.lang.Runtime.load(Runtime.java:331)
at java.lang.System.load(System.java:982)
如何解决这个问题?
=== 更新 ====
我将原生库从lib/<archType>/libmyNative.so复制到/data/data/com.my.app/my_native/libmyNative.so,然后使用上面的代码加载库。
【问题讨论】:
-
Nexus 9?你用的是什么设备?您的错误在这里:
is 32-bit instead of 64-bit。针对 64 位库进行编译。 -
是的,Nexus 9。我知道错误出在哪里。但我正在寻找一种使其与 32 位本机库一起使用的方法。
-
这是通过APK安装的普通第三方应用程序,还是预装在ROM中?在前一种情况下,该过程应该以正确的模式(32/64 位)启动,具体取决于您在包中包含的本机库的风格。在后一种情况下,请查看stackoverflow.com/questions/27712921/…。
-
@mstorsjo,两者都不是。这是我自己的本机代码,ndk-built & used(load) in my own app.
-
那么应用程序进程应该在 32 位模式下启动就好了 - 使用旧 NDK 版本构建的应用程序应该仍然可以正常工作。你能添加一个清单吗? "unzip -l yourapp.apk" 显示?
标签: android android-ndk android-5.0-lollipop