Android JNI将C更改为C++;
我想在java(android)应用程序中使用一段简单的代码:Android JNI将C更改为C++;,android,android-ndk,java-native-interface,Android,Android Ndk,Java Native Interface,我想在java(android)应用程序中使用一段简单的代码: #include <string.h> #include <jni.h> jstring Java_com_example_ndk_MainActivity_stringFromJNI( JNIEnv* env, jobject thiz) { return (*env)->NewString
#include <string.h>
#include <jni.h>
jstring
Java_com_example_ndk_MainActivity_stringFromJNI( JNIEnv* env,
jobject thiz)
{
return (*env)->NewStringUTF(env, "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++中的失败(运行时)。这意味着C++中函数名与普通C.</P>不一样。 要禁止此名称损坏,必须将函数声明为
extern“C”
:
要使用,请使用以下内容围绕您的功能:
extern“C”
{
/*您的C API*/
}
也许我没有解释我的问题很好:当我使用C++时,错误发生了,我不想从C++运行C,我只想运行C++代码(正如我说的,我已经修改过代码)返回EnV--NexStReutUTF(“hello from jNI!”),但是有一个错误runtime@dilix函数仍然是C++,只是函数名称不会被“损坏”所以它可以从C代码中调用。例如,对于名字的描述,主要的想法是只在没有C的情况下运行C++代码。现在我可以运行*.c代码,但是当我试图从*.CPP(不带C代码)启动代码时,有一个描述错误,就像我说的,代码是C++,它只是不是C++特定的函数名。函数内部的实际代码是100% C++。阅读我在上一篇评论中链接到的维基百科文章!如果没有代码>外部“C”/code >声明,JVM不能调用C++函数。谢谢,我会阅读这篇文章,你的代码完全符合Mayaybe,我不解释我的问题很好:当我使用C++时,错误发生了,我不想从C++运行C,我只想运行C++代码(正如我说的,我修改过的代码)返回EnV--NexStReGutUTF(来自JNI的Hello!);”),但运行时出现错误
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)
extern "C" jstring
Java_com_example_ndk_MainActivity_stringFromJNI( JNIEnv* env,
jobject thiz)
{
return (*env)->NewStringUTF(env, "Hello from JNI !");
}