您的位置:首页 > 编程语言 > Java开发

java.lang.UnsatisfiedLinkError: Native method not found 可能引起的原因

2017-07-28 18:25 477 查看
在本地使用.so库时,偶尔会出现java.lang.UnsatisfiedLinkError: Native method not found 异常,产生原因可能如下:

1,生成的.h头文件中 Java没有大写。例如:

JNIEXPORT void JNICALL java_com_android_jni_center_NewJni_sendData
(JNIEnv * env, jobject obj, jstring str){
printf("%s",str);
}

2,存在对应native方法的类,没有静态加载so库  System.loadLibrary("JniC");
public class NewJni {
public native String getStringFromC();
public native void sendData(String data);
public native void sendIntData(int data);
public native int getAge();
static {
System.loadLibrary("JniC");
}
}

3,AndroidStudio中,so文件不能放到libs下,放到libs也会出现找不到情况。eclipse 是可以将so文件放到libs下的



正确的方式是放到代码的src/main/jniLibs下面。如下:



4,某些第三方的so文件,要求项目的native方法必须放入到指定的包名下,包名不能任意命名。如果你将含有native方法的类,没有按照他的规定放到指定的位置也可能会出现找不到的情况。大概原因是因为他的so已经按照指定的包名,类名和方法名,生成了对应的so。如果你不按照指定的位置放,那么native方法就不能与so中的方法一一对应,所以就是匹配不到的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  jni jni异常
相关文章推荐