[JNI] java.lang.UnsatisfiedLinkError:Native method not found && no implementation found for native ~
阿新 • • 發佈:2019-02-18
解決方法
一般情況,出現此種問題,有如下解決方案,依次檢查即可。
1.檢查函式頭部命名問題
方法明的命名規則為:JNIEXPORT 返回值型別 Java_包名_類名_函式名(JNIEnv *env, Jobject obj, 傳遞的引數)
確保.h 和.cpp中的函式命名一致,也可通過javah生成.h檔案。
2.C++檔案問題
因JNI是按照C語言的方式呼叫,而C++支援過載,因此編譯生辰程式碼的時候會對函式的名字進行處理,如:加入返回值型別;而C語言不會對此進行處理,只是簡單的函式名,不做處理。因此,如果為C++檔案,必須宣告extern “C”
宣告方式:
1.用extern "C" { ... } 包含索要呼叫的程式碼段;
2.在標頭檔案中用如下程式碼段包含函式宣告
#ifdef __cplusplus extern "C" { #endif ...... #ifdef __cplusplus } #endif
3.傳值問題
型別不對,或者空值,有可能會報如上錯誤。
4.so沒有load
在使用c/c++程式碼前,需要載入生成的.so檔案,語句為:System.loadLibrary("需要與mk檔案中命名一致");