1. 程式人生 > >java.lang.UnsatisfiedLinkError: Native method not found:

java.lang.UnsatisfiedLinkError: Native method not found:

今天藉助Github上的一個專案做二維碼掃碼功能,接用了這個專案的so庫和java API。

呼叫方法時提示報錯,提示 java.lang.UnsatisfiedLinkError: Native method not found:

首先確定so庫已經載入成功:

查詢許久無果。忽然想起去年遇到過的一個類似的問題,和java類的包名有關,嘗試了一下當時的方法,方法如下:

1. 觀察示例的java檔案中的包名:

com.duoyi.qrdecode

2. 然後在eclipse用這個名稱新建一個包,並把類放進去:

再次執行,問題解決。

 

順便觀察so庫C/C++檔案中的程式碼(有原始碼的話)進行驗證:

1. java中程式碼:

2.C++中程式碼:

可以看到,cpp檔案中的方法命名是有具體規則的,似乎是在配合java中的程式碼,形式為:Java_包名_類名_方法名。

有興趣的可以看看JNI命名規範 https://blog.csdn.net/love_xsq/article/details/49942263