so调用报错 java.lang.UnsatisfiedLinkError: No implementation found for ...
生活随笔
收集整理的這篇文章主要介紹了
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.xxx.location.net.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)
為什么可以調用,不會報錯呢?
有哪位大神知道是什么原因,歡迎分享討論。
總結
以上是生活随笔為你收集整理的so调用报错 java.lang.UnsatisfiedLinkError: No implementation found for ...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【最佳实践】瀚高数据库备份恢复操作
- 下一篇: more命令 – 显示文本文件内容