UnsatisfiedLinkError:找不到正确放置在Eclipse库中的.so文件的本机方法 [英] UnsatisfiedLinkError: Native method not found with .so file correctly put in Eclipse libs
问题描述
我是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");
请帮助我.预先感谢!
推荐答案
-
loadLibrary()
使用不带"lib"
前缀的名称.
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屋!