700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > so调用报错 java.lang.UnsatisfiedLinkError: No implementation found for ...

so调用报错 java.lang.UnsatisfiedLinkError: No implementation found for ...

时间:2023-03-29 19:18:20

相关推荐

so调用报错 java.lang.UnsatisfiedLinkError: No implementation found for ...

最近在做一个NDK的Android项目,需要将cpp代码打包生成so库。

为了方便,直接将之前的一个项目拿过来,将cpp代码拷贝进来,修改了Android.mk文件,ndk-build成功生成so库。

兴奋~~~

小样,不要高兴太早,在下面等着你呢。。。

一调用native方法就报错:

java.lang.UnsatisfiedLinkError: No implementation found for int com.xxx.utils.RtcmUtil.decode(byte[], int) (tried Java_com_xxx_utils_RtcmUtil_decode and Java_com_xxx_utils_RtcmUtil_decode___3BI)at com.xxx.utils.RtcmUtil.decode(Native Method)at com..ntrip.NtripClient$2.run(NtripClient.java:177)

于是,我一点点检查,包名、方法名,一个字母、一个字母的核对。

没有错啊,为什么?为什么?为什么?

苦思不得其解,只能一点点摸索,尝试。。。

在java类中从新写一个native方法,用 javah -classpath . -jni com.xxx.utils.RtcmUtil 命令从新生成头文件,在cpp代码中从新实现这个新的方法,调用改方法,成功了,居然成功啦。

对比一下两个有什么不同,发现两个函数的参数类型不同,

有问题的参数:add(JNIEnv *env, jobject obj, jstring s)

没问题的参数:add(JNIEnv *env, jclass obj, jstring s)

我就奇怪了,为什么之前的项目,我用的就是add(JNIEnv *env, jobject obj, jstring s)

为什么可以调用,不会报错呢?

有哪位大神知道是什么原因,欢迎分享讨论。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。