2013-03-09 103 views
3

我試圖做一個NDK應用程序,但我得到這個錯誤:java.lang.UnsatisfiedLinkError中:本機方法未找到

java.lang.UnsatisfiedLinkError: Native method not found: com.example.hellondk.jni.HelloNDK.hello:()I 

我不明白,因爲C++函數的名稱是相同的Java包名稱和類

HelloNDK.cpp

#include <jni.h> 

JNIEXPORT jint JNICALL Java_com_example_hellondk_jni_HelloNDK_hello(JNIEnv* env, jobject o){ 
    return (jint) 2; 
} 

HelloNDK.java

package com.example.hellondk.jni; 

public class HelloNDK { 
    public native int hello(); 

    static { 
     System.loadLibrary("HelloNDK"); 
    } 
} 

Android.mk

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_MODULE := HelloNDK 
LOCAL_SRC_FILES := HelloNDK.cpp 

include $(BUILD_SHARED_LIBRARY) 

回答

22

你導出爲一個C++函數,但是JNI鏈接並不瞭解C++名字改編,所以它不能夠找到它。

您可以使用extern "C"有沒有C++名字改編導出的函數:

extern "C" JNIEXPORT jint JNICALL Java_com_example_hellondk_jni_HelloNDK_hello(JNIEnv* env, jobject o) 
{ 
    return (jint) 2; 
} 
+0

感謝lottttttttt ... :)) – berserk 2014-03-31 06:41:05

+0

你不知道有多大幫助,這是。言語無法表達我的感激之情。在過去的2個小時裏我一直在搞這個,這真是太愚蠢了。在天堂裏有一個地方爲你保留,好先生。 – 2015-11-04 02:56:26

+0

@AnonymousPerson很高興爲您服務。 :-) – 2015-11-04 16:13:16

相關問題