1. 程式人生 > >[JNI] java.lang.UnsatisfiedLinkError:Native method not found && no implementation found for native ~

[JNI] java.lang.UnsatisfiedLinkError:Native method not found && no implementation found for native ~

解決方法

        一般情況,出現此種問題,有如下解決方案,依次檢查即可。

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檔案中命名一致");