我得到這個「java.lang.UnsatisfiedLinkError中:未發現本機方法:」當我試圖訪問JNI natvie方法「java.lang.UnsatisfiedLinkError:未找到本地方法:」如果刪除頭文件,錯誤可以修復?
11-20 10:52:29.246 E/AndroidRuntime(2742): at com.example.nativeegl.MyRenderer.nativeGetHelloString(Native Method)
11-20 10:52:29.246 E/AndroidRuntime(2742): at com.example.nativeegl.MyRenderer.onDrawFrame(MyRenderer.java:36)
11-20 10:52:29.246 E/AndroidRuntime(2742): at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1516)
11-20 10:52:29.246 E/AndroidRuntime(2742): at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1240)
後來我發現,如果我刪除.h文件,並只保留.cpp本機文件。錯誤不會發生。
這是我的頭文件
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
#include <string.h>
/* Header for class com_example_nativeegl_MyRenderer */
#ifndef _Included_com_example_nativeegl_MyRenderer
#define _Included_com_example_nativeegl_MyRenderer
extern "C" {
/*
* Class: com_example_nativeegl_MyRenderer
* Method: nativeGetHelloString
* Signature:()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_example_nativeegl_MyRenderer_nativeGetHelloString
(JNIEnv *, jobject);
}
#endif
,這是我的cpp文件
#include "com_example_nativeegl_MyRenderer.h"
#ifndef _Included_com_example_nativeegl_MyRenderer
#define _Included_com_example_nativeegl_MyRenderer
extern "C" {
/*
* Class: com_example_nativeegl_MyRenderer
* Method: nativeGetHelloString
* Signature:()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_example_nativeegl_MyRenderer_nativeGetHelloString
(JNIEnv *env, jobject obj) {
return env->NewStringUTF((char*)" This is calling from JNI suckers!");
}
}
#endif
我Android.mk文件如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_CFLAGS := -Wall
LOCAL_MODULE := myegl_jni
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
LOCAL_CPP_EXTENSION := .cpp
LOCAL_SRC_FILES := com_example_nativeegl_MyRenderer.cpp
include $(BUILD_SHARED_LIBRARY)
我發現瞭如果我刪除頭文件並只保留cpp文件,則不會發生錯誤。但我不知道它的原因。
您不允許以下劃線開頭,後跟大寫字母。 – Simple
@簡單 - 顯然你是對的。我不知道什麼機器生成它?也許我們應該告訴誰寫了代碼。 – doctorlove
宏由javah -classpath bin/classes -d jni com.example.nativeegl.myrenderer自動生成。我沒有懷疑他們是錯誤的。他們? – BBai