我有一段简单的代码要在我的 java (android) 应用程序中使用:
#include <string.h>
#include <jni.h>
jstring
Java_com_example_ndk_MainActivity_stringFromJNI( JNIEnv* env,
jobject thiz)
{
return (*env)->NewStringUTF(env, "Hello from JNI !");
}
如果我使用 C 并调用此文件 *.c - 一切正常,但我想在 C++ 上使用此代码,我将此文件重命名为 *.cpp(并更改 Android.mk)。一切都已编译,但是当我尝试以我在 C 中使用它的方式使用此函数时,我遇到了错误。
*我还修改了函数的主体:
return env->NewStringUTF("Hello from JNI !");
尝试使用这个:
public native String stringFromJNI();
static {
System.loadLibrary("hello-jni");
}
并得到这样的错误:
09-10 17:55:46.410: W/dalvikvm(6339): No implementation found for native Lcom/example/ndk/MainActivity;.stringFromJNI ()Ljava/lang/String;
09-10 17:55:46.410: E/AndroidRuntime(6339): java.lang.UnsatisfiedLinkError: stringFromJNI
09-10 17:55:46.410: E/AndroidRuntime(6339): at com.example.ndk.MainActivity.stringFromJNI(Native Method)
09-10 17:55:46.410: E/AndroidRuntime(6339): at com.example.ndk.MainActivity.onCreate(MainActivity.java:22)
我不明白为什么相同的代码在 C 中运行并在 C++ 中失败(运行时)。