so调用报错 java.lang.UnsatisfiedLinkError: No implementation found for ...
最近在做一個NDK的Android項目,需要將cpp代碼打包生成so庫。
為了方便,直接將之前的一個項目拿過來,將cpp代碼拷貝進來,修改了Android.mk文件,ndk-build成功生成so庫。
興奮~~~
小樣,不要高興太早,在下面等著你呢。。。
一調(diào)用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.xxx.location.net.ntrip.NtripClient$2.run(NtripClient.java:177)于是,我一點點檢查,包名、方法名,一個字母、一個字母的核對。
沒有錯啊,為什么?為什么?為什么?
苦思不得其解,只能一點點摸索,嘗試。。。
在java類中從新寫一個native方法,用 javah -classpath . -jni com.xxx.utils.RtcmUtil 命令從新生成頭文件,在cpp代碼中從新實現(xiàn)這個新的方法,調(diào)用改方法,成功了,居然成功啦。
對比一下兩個有什么不同,發(fā)現(xiàn)兩個函數(shù)的參數(shù)類型不同,
有問題的參數(shù):add(JNIEnv *env, jobject obj, jstring s)
沒問題的參數(shù):add(JNIEnv *env, jclass obj, jstring s)
我就奇怪了,為什么之前的項目,我用的就是?add(JNIEnv *env, jobject obj, jstring s)
為什么可以調(diào)用,不會報錯呢?
有哪位大神知道是什么原因,歡迎分享討論。
總結(jié)
以上是生活随笔為你收集整理的so调用报错 java.lang.UnsatisfiedLinkError: No implementation found for ...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【最佳实践】瀚高数据库备份恢复操作
- 下一篇: C++控制台贪吃蛇小游戏详细教程