我开始了android应用程序开发,并遵循了以下教程:
http://mindtherobot.com/blog/452/android-beginners-ndk-setup-step-by-step/,但应用程序无法工作。我对它进行了调试,日志猫显示了这条消息: JNI_Onload not found..how我能解决这个问题吗?
谢谢
发布于 2012-08-26 11:43:13
JNI_OnLoad函数的主要用途是注册所有本机方法。
这是推荐的方法,但不是唯一的方法。因此,提供JNI_OnLoad函数的是可选的。因为它用于注册所有本机方法,所以在实际使用该方法之前,它可以发现java本机方法声明与其C/C++副本之间的签名不匹配。
相反,您可以从静态类初始化器加载本机库,如下所示:
static {
System.loadLibrary("mylib");
}这样,您就不必提供JNI_OnLoad函数,'mylib‘中的所有本机方法都会被自动发现。唯一的缺点是,在实际调用某些本机方法签名之前,您不会知道它是否错误。在这种情况下,你会得到一个'unsatisfiedlinkerror‘,告诉你没有找到你试图调用的本机方法的实现。
如果你选择这个选项(选项2-自动发现),调试级别的消息将只是一个警告,告诉你你已经‘忘记’提供一个JNI_OnLoad函数,所以你可以忽略它。
有关更多信息,请查看JNI提示:
http://developer.android.com/guide/practices/jni.html
发布于 2011-02-08 08:42:39
JNI_OnLoad是一条调试级消息,它只是让您知道没有找到函数。
它之所以存在,是因为人们偶尔会编写没有'extern“C”声明的JNI_OnLoad,然后不确定为什么事情不能正常工作。
您面临的问题可能与消息无关。看看附近的logcat输出,寻找线索。dlopen()失败和Java异常可能是相关的。
您应该将其中的一些内容粘贴到问题中,也许可以更详细地描述失败(“没有工作”有点含糊)。
https://stackoverflow.com/questions/4921222
复制相似问题