Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android JNI将C更改为C++;_Android_Android Ndk_Java Native Interface - Fatal编程技术网

Android JNI将C更改为C++;

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

我想在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 !");
}
尝试使用以下方法:

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 !");
}