NDK编译没错,运行so库文件出错

java.lang.UnsatisfiedLinkError: Native method not found 三种可能解决方案


        so文件编译生成后,运行时,有时候会遇到java.lang.UnsatisfiedLinkError: Native method not found问题,有可能是以下三种因素:

一、Jni方法头部大小写问题     

在C++中,方法名:Java_com_XXX,而不是java_com_XXX。建议直接从生成的.h头文件直接复制方法名到C或者C++文件中。

二、C++文件问题

        如果是C++文件(.cpp或者.cc),要使用extern "C" {   } 把本地方法括进去。【这一步不好说,亲测头文件extern "C"{}包括后,源文件不使用也可以编译;后来也遇到源文件中的代码也需要用这个包括才能编译 = =】

三、往Jni方法中传值问题

         如,调用native方法sendSomeThing(Object object),如果传入的object为null,有可能会报上面错误。


【以上为网上找到的方法,真实实用】


Java运行报错:Progress crash....(差不多是这个)

大概意思是线程出错,(不考虑其它的特别的情况下)你的C++程序语法对了,但内容出错...无法执行;

确定是否以下问题,这是我自己遇到过的:
  • 如果使用了env->FindClass(),确定里面查找的类是否存在?你写的规则是否出错(完整包名+类名,点(.)用/代替分隔)
  • 仔细检查是否C++文件里的函数名命名是否正确,命名规则网上搜一下一把(最好使用javah命令自动生成,这样不会出错的)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值