首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >找不到JNI_OnLoad

找不到JNI_OnLoad
EN

Stack Overflow用户
提问于 2011-02-07 20:22:56
回答 2查看 13.6K关注 0票数 4

我开始了android应用程序开发,并遵循了以下教程:

http://mindtherobot.com/blog/452/android-beginners-ndk-setup-step-by-step/,但应用程序无法工作。我对它进行了调试,日志猫显示了这条消息: JNI_Onload not found..how我能解决这个问题吗?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2012-08-26 11:43:13

JNI_OnLoad函数的主要用途是注册所有本机方法。

这是推荐的方法,但不是唯一的方法。因此,提供JNI_OnLoad函数的是可选的。因为它用于注册所有本机方法,所以在实际使用该方法之前,它可以发现java本机方法声明与其C/C++副本之间的签名不匹配。

相反,您可以从静态类初始化器加载本机库,如下所示:

代码语言:javascript
复制
static {
    System.loadLibrary("mylib");
}

这样,您就不必提供JNI_OnLoad函数,'mylib‘中的所有本机方法都会被自动发现。唯一的缺点是,在实际调用某些本机方法签名之前,您不会知道它是否错误。在这种情况下,你会得到一个'unsatisfiedlinkerror‘,告诉你没有找到你试图调用的本机方法的实现。

如果你选择这个选项(选项2-自动发现),调试级别的消息将只是一个警告,告诉你你已经‘忘记’提供一个JNI_OnLoad函数,所以你可以忽略它。

有关更多信息,请查看JNI提示:

http://developer.android.com/guide/practices/jni.html

票数 9
EN

Stack Overflow用户

发布于 2011-02-08 08:42:39

JNI_OnLoad是一条调试级消息,它只是让您知道没有找到函数。

它之所以存在,是因为人们偶尔会编写没有'extern“C”声明的JNI_OnLoad,然后不确定为什么事情不能正常工作。

您面临的问题可能与消息无关。看看附近的logcat输出,寻找线索。dlopen()失败和Java异常可能是相关的。

您应该将其中的一些内容粘贴到问题中,也许可以更详细地描述失败(“没有工作”有点含糊)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4921222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档