3

NDKアプリケーションを作成しようとしていますが、次のエラーが発生します。

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)
4

1 に答える 1

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;
}
于 2013-03-09T15:28:35.767 に答える