Android 调用.so包时报错:No implementation found for native Lxxx, java.lang.UnsatisfiedLinkError: XXX时的解决办法

问题就是在调用自己同事写的.so包时,怎么也调不通,程序一直报错退出,错误内容就是:

1 No implementation found for native Lxxx, 

2 java.lang.UnsatisfiedLinkError: XXX.

因为我俩都没接触过ndk,所以没有经验积累,都需要慢慢摸索。找了一上午原因也一直没通,各种无力感涌来,

其中包括以下几个很强力的办法,都没能解决我的问题:

1 在.cpp文件里,增加extern C{}结构,

2 在libs下,创建armeabi和armeabi_v7a这两个目录,分别将.so文件放进去。

3 检查

static{
	System.LoadLibrary("so name");//不能带lib
}


经过无数次失败后,想起平时调用百度地图,个推等等第三方包的时候,都有会一个或者多个.so文件,同时会有一个对应的命名类似.jar文件,想到也许是我创建的项目的目录名和.so本身的方法名不匹配造成的,于是:

经过不断尝试,发现:

在创建项目时,该项目的包名必须和这个.so文件的方法里的目录一致才可以保证调通,

即:

JNICALL Java_com_ndk_demo_jni_compute();

那我们的项目包名就应该是:com.ndk.demo,而声明native方法的类名是:jni

这样才能保证调用。

其他的命名方式没有进行过多尝试,有其他匹配方式的同学,留言给我,多谢。

这个方法解决了我的问题。

希望刚接触ndk的同学,遇到这个问题的时候,能帮你节约时间、宽心解惑。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值