UnsatisfiedLinkError:找不到正确放置在Eclipse库中的.so文件的本机方法 [英] UnsatisfiedLinkError: Native method not found with .so file correctly put in Eclipse libs

查看:267
本文介绍了UnsatisfiedLinkError:找不到正确放置在Eclipse库中的.so文件的本机方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是Android原生方法的新手.即使我已将正确的* .so文件确保我的armeabi,armeabi-v7a,mips和x86正确放置在文件夹中,也出现以下错误.

I'm new in using native methods for Android. I got the errors as below even after I have make sure my armeabi, armeabi-v7a, mips and x86 with correct *.so file are put correctly in the folders.

10-21 18:51:36.685: E/AndroidRuntime(24277): java.lang.UnsatisfiedLinkError: Native method not found: com.arzap.mimas.MimasJNI.MIMAS_LoadModel:(Ljava/lang/String;)V
10-21 18:51:36.685: E/AndroidRuntime(24277):    at com.arzap.mimas.MimasJNI.MIMAS_LoadModel(Native Method)
10-21 18:51:36.685: E/AndroidRuntime(24277):    at com.arzap.mimas.ar.MainActivity.onCreate(MainActivity.java:36)
10-21 18:51:36.685: E/AndroidRuntime(24277):    at android.app.Activity.performCreate(Activity.java:5451)
10-21 18:51:36.685: E/AndroidRuntime(24277):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)
10-21 18:51:36.685: E/AndroidRuntime(24277):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2377)
10-21 18:51:36.685: E/AndroidRuntime(24277):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2471)
10-21 18:51:36.685: E/AndroidRuntime(24277):    at android.app.ActivityThread.access$900(ActivityThread.java:175)
10-21 18:51:36.685: E/AndroidRuntime(24277):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1308)
10-21 18:51:36.685: E/AndroidRuntime(24277):    at android.os.Handler.dispatchMessage(Handler.java:102)
10-21 18:51:36.685: E/AndroidRuntime(24277):    at android.os.Looper.loop(Looper.java:146)
10-21 18:51:36.685: E/AndroidRuntime(24277):    at android.app.ActivityThread.main(ActivityThread.java:5602)
10-21 18:51:36.685: E/AndroidRuntime(24277):    at java.lang.reflect.Method.invokeNative(Native Method)
10-21 18:51:36.685: E/AndroidRuntime(24277):    at java.lang.reflect.Method.invoke(Method.java:515)
10-21 18:51:36.685: E/AndroidRuntime(24277):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
10-21 18:51:36.685: E/AndroidRuntime(24277):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
10-21 18:51:36.685: E/AndroidRuntime(24277):    at dalvik.system.NativeStart.main(Native Method)

以下是我加载.so文件的方式:

As below is how I loaded my .so file:

static{
    try {
        System.loadLibrary("libMimasAr3D");
    } catch (UnsatisfiedLinkError use) {
        Log.e("JNI", "WARNING: Could not load libMimasAr3D.so");
    }
}

还有什么额外的(我认为这不是主要问题)吗?

Something extra (which I don't think that's the main issue)?

在加载库的同一文件中,我有以下方法:

In the same file where I load my library, I have this method:

public static native void MIMAS_LoadModel(int ppModel);

Main Activity.java:

Main Activity.java:

   //Description: Load the model.
   //Input: pModelPath - A file path to the saved model.
   //Return: A pointer to the object of the model. NULL if loading is failed.
    //Load image to MIMAS_SDK
    MimasJNI.MIMAS_LoadModel("models/model.bin");

请帮助我.预先感谢!

推荐答案

  1. loadLibrary()使用不带 "lib" 前缀的名称.

  1. loadLibrary() takes the name without "lib" prefix.

如果您不使用

If you don't use RegisterNatives(), you should name the exported functions of your native library according to javah prescriptions, e.g. Java_com_arzap_mimas_MimasJNI_MIMAS_1LoadModel.

如果本机代码是C ++,请确保导出的函数具有 extern "C" 前缀以防止名称篡改.

If the native code is C++, make sure the exported functions have extern "C" prefix to pervent name mangling.

这篇关于UnsatisfiedLinkError:找不到正确放置在Eclipse库中的.so文件的本机方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆