JNI和Android ... UnsatisfiedLinkError
问题描述:
Man ...这个bug让我失望。JNI和Android ... UnsatisfiedLinkError
的logcat:
01-29 22:25:00.293: ERROR/AndroidRuntime(27386): FATAL EXCEPTION: main
01-29 22:25:00.293: ERROR/AndroidRuntime(27386): java.lang.IllegalStateException: Could not execute method of the activity
01-29 22:25:00.293: ERROR/AndroidRuntime(27386): at android.view.View$1.onClick(View.java:2072)
01-29 22:25:00.293: ERROR/AndroidRuntime(27386): at android.view.View.performClick(View.java:2408)
01-29 22:25:00.293: ERROR/AndroidRuntime(27386): at android.widget.CompoundButton.performClick(CompoundButton.java:99)
01-29 22:25:00.293: ERROR/AndroidRuntime(27386): at android.view.View$PerformClick.run(View.java:8819)
01-29 22:25:00.293: ERROR/AndroidRuntime(27386): at android.os.Handler.handleCallback(Handler.java:587)
01-29 22:25:00.293: ERROR/AndroidRuntime(27386): at android.os.Handler.dispatchMessage(Handler.java:92)
01-29 22:25:00.293: ERROR/AndroidRuntime(27386): at android.os.Looper.loop(Looper.java:123)
01-29 22:25:00.293: ERROR/AndroidRuntime(27386): at android.app.ActivityThread.main(ActivityThread.java:4627)
01-29 22:25:00.293: ERROR/AndroidRuntime(27386): at java.lang.reflect.Method.invokeNative(Native Method)
01-29 22:25:00.293: ERROR/AndroidRuntime(27386): at java.lang.reflect.Method.invoke(Method.java:521)
01-29 22:25:00.293: ERROR/AndroidRuntime(27386): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
01-29 22:25:00.293: ERROR/AndroidRuntime(27386): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
01-29 22:25:00.293: ERROR/AndroidRuntime(27386): at dalvik.system.NativeStart.main(Native Method)
01-29 22:25:00.293: ERROR/AndroidRuntime(27386): Caused by: java.lang.reflect.InvocationTargetException
01-29 22:25:00.293: ERROR/AndroidRuntime(27386): at com.example.viewer.Viewer.denoiseSlice(Viewer.java:170)
01-29 22:25:00.293: ERROR/AndroidRuntime(27386): at java.lang.reflect.Method.invokeNative(Native Method)
01-29 22:25:00.293: ERROR/AndroidRuntime(27386): at java.lang.reflect.Method.invoke(Method.java:521)
01-29 22:25:00.293: ERROR/AndroidRuntime(27386): at android.view.View$1.onClick(View.java:2067)
01-29 22:25:00.293: ERROR/AndroidRuntime(27386): ... 12 more
01-29 22:25:00.293: ERROR/AndroidRuntime(27386): Caused by: java.lang.UnsatisfiedLinkError: RicianDenoise
01-29 22:25:00.293: ERROR/AndroidRuntime(27386): at com.example.viewer.Viewer.RicianDenoise(Native Method)
01-29 22:25:00.293: ERROR/AndroidRuntime(27386): ... 16 more
加载库,并声明它:
public native void RicianDenoise(int w, int h, int p,
short [] s_noised_slice, double [] d_noised_slice,
short [] s_denoised_slice, double [] d_denoised_slice);
static {
System.loadLibrary("denoise");
}
C功能:
void
Java_com_example_viewer_Viewer_RicianDenoise (JNIEnv *env, jclass cls, jint M,
jint N, jint P, jshort * s_noised_slice,
jdouble * d_noised_slice,
jshort * s_denoised_slice,
jdouble * d_denoised_slice) {
/* ... */
}
我跑
ndk-build -B -C [project]/jni
我不能得到任何工作。任何建议,或经验与这个问题? logcat中的调用行是我只是试图调用函数,顺便说一句。感谢您......请我的英雄:(
答
阵列并没有转化为数组类型的指针在C /再次
双[]使用jdoubleArray
短期[]使用jshortArray
+0
稍后发现。谢谢。 – 2011-01-31 20:48:11
答
贵库使用其他C/C++库,并使用系统路径是那些可达?在Java中
+0
,我不知道我该怎么做它:C++中,JNI
使用在本机端此方案来声明数组工作,不幸的是,这个函数只是让这个Activity退出错误消息...所以我们在这里发现另一个bug:/ – 2011-01-30 06:55:36