ran*_*ana 4 c c++ java android android-ndk
我试图在不同的手机上测试我的NDK编程.相同的应用程序在所有其他手机上运行,但在三星4.0.2它只是停止,抛出以下错误.我错过了什么吗?任何帮助表示赞赏
10-29 12:02:57.729: E/AndroidRuntime(3626): at android.app.Activity.performCreate(Activity.java:4486)
10-29 12:02:57.729: E/AndroidRuntime(3626): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1052)
10-29 12:02:57.729: E/AndroidRuntime(3626): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1931)
10-29 12:02:57.729: E/AndroidRuntime(3626): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992)
10-29 12:02:57.729: E/AndroidRuntime(3626): at android.app.ActivityThread.access$600(ActivityThread.java:127)
10-29 12:02:57.729: E/AndroidRuntime(3626): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158)
10-29 12:02:57.729: E/AndroidRuntime(3626): at android.os.Handler.dispatchMessage(Handler.java:99)
10-29 12:02:57.729: E/AndroidRuntime(3626): at android.os.Looper.loop(Looper.java:137)
10-29 12:02:57.729: E/AndroidRuntime(3626): at android.app.ActivityThread.main(ActivityThread.java:4511)
10-29 12:02:57.729: E/AndroidRuntime(3626): at java.lang.reflect.Method.invokeNative(Native Method)
10-29 12:02:57.729: E/AndroidRuntime(3626): at java.lang.reflect.Method.invoke(Method.java:511)
10-29 12:02:57.729: E/AndroidRuntime(3626): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:976)
10-29 12:02:57.729: E/AndroidRuntime(3626): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:743)
10-29 12:02:57.729: E/AndroidRuntime(3626): at dalvik.system.NativeStart.main(Native Method)
**10-29 12:02:57.729: E/AndroidRuntime(3626): Caused by: java.lang.UnsatisfiedLinkError: Cannot load library: reloc_library[1285]: 161 cannot locate '__aeabi_idiv0'...**
10-29 12:02:57.729: E/AndroidRuntime(3626): at java.lang.Runtime.loadLibrary(Runtime.java:370)
10-29 12:02:57.729: E/AndroidRuntime(3626): at java.lang.System.loadLibrary(System.java:535)
Run Code Online (Sandbox Code Playgroud)
Android 4.0上存在一个已知错误,其中加载了本机库,这可能是导致问题的原因.如果你想深入了解细节,我会在上面写一篇详细的博文.长话短说:
我想您尝试使用的库是针对不同的体系结构编译的(通常是armeabi和armeabi-v7a,分别存储在libs/armeabi和中libs/armeabi-v7a).在Android 4.0上,该System.loadLibrary()方法搞砸了:当您尝试加载库时libsomething.so,它不是在与设备体系结构相对应的文件夹中搜索本机库,而是加载第一个库,其名称libsomething.so在任何子libs文件夹中找到,可能会加载错误的架构,可能导致这样的崩溃.
最简单的解决方法:
libsomething.soarmeabi和libsomething-v7a.soarmeabi-v7a.这样,在使用时System.loadLibrary(),不会因为几个文件具有相同名称而感到困惑.System.loadLibrary(),即您必须自己检测设备使用的体系结构.有几种方法可以做到这一点:其中之一是使用android_getCpuFeatures()从cpu-features.h从本地代码(在上面的博文解释)的文件,另一个是解析系统/proc/cpuinfo从Java文件(例如,作为解释这里)希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
1655 次 |
| 最近记录: |