日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

17、java.lang.UnsatisfiedLinkError: No implementation 处理方法

發(fā)布時間:2023/12/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 17、java.lang.UnsatisfiedLinkError: No implementation 处理方法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、問題現(xiàn)象

在使用第三方生成的 so 庫時,遇到下面的bug:

UnsatisfiedLinkError: No implementation found for

java.lang.UnsatisfiedLinkError: No implementation found forjava.lang.String com.cloud.wd.tralanguage.JniUtil.getStringFromC() (tried Java_com_cloud_wd_tralanguage_JniUtil_getStringFromC and Java_com_cloud_wd_tralanguage_JniUtil_getStringFromC__)

如圖:

二、問題分析

按照bug log提示內(nèi)容說是我 getStringFromC 方法并沒有實現(xiàn):

而我引用的是第三方的so這個方法已經(jīng)實現(xiàn)了,既然實現(xiàn)了 為什么還會提示需要實現(xiàn)呢?

原來仔細(xì)觀察得知 :提示讓我實現(xiàn) 我自己寫的 native 方法:

com.cloud.wd.tralanguage.JniUtil.getStringFromC(),壓根沒有引用到我添加的so中的方法, 問題找到了那么如何引用 正確的so呢?

經(jīng)過一番的 google 發(fā)現(xiàn):再使用第三方so 方法時, 所使用的native 類的位置要和之前生成 so 方法的 包名 、類名 、方法名 要完全一致!

例如:生成so工程的 native 方法類 ,

包名: com.cloud.jnitest 類名: JniTest 方法名:getStringFromC ()

則 要想使用 so中的getStringFromC () 方法; 就需要

使用的so工程中添加:

包名: com.cloud.jnitest 類名: JniTest 方法名:getStringFromC ()

只用 兩者的包名 、類名、方法名 完全一致才會正確的引用到需要加載的so;

三、問題解決

問題找到了,就好解決了。

  • 在src/main/java 目錄下建立 和生成so包名一樣的文件夾,

    例如:使用生成so的包名是 com.cloud.jnitest ,那么就在使用so的工程src/main/java 新建 相同包名的文件。

  • 在src/main/java /[so包名] 目錄下建立 和生成so包名一樣的類文件,

    例如:使用生成so的類名是 JniTest ,那么就在使用so的工程src/main/java /[so包名] 新建 相同包名的類文件。

  • 在src/main/java /[so包名] /類文件 ,中添加需要使用到的方法。

    在使用 so的工程中 最終 效果:


  • 啦啦啦 —— 今天夏至要吃面!所以 我今晚 下面給你吃呀 … 哈哈


    參考鏈接:

    http://m.blog.csdn.net/u012721933/article/details/51016027

    http://blog.csdn.net/ouyang_peng/article/details/52997698

    總結(jié)

    以上是生活随笔為你收集整理的17、java.lang.UnsatisfiedLinkError: No implementation 处理方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。