gpt4 book ai didi

android - JNI 将 C 更改为 C++

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:34:23 26 4
gpt4 key购买 nike

我有一段简单的代码,我想在我的 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++ 中失败(运行时)。

最佳答案

为了允许函数重载,C++ 使用了一种称为名称修改 的方法。这意味着 C++ 中的函数名称与普通 C 中的函数名称不同。

要禁止此名称修改,您必须将函数声明为 extern "C":

extern "C" jstring 
Java_com_example_ndk_MainActivity_stringFromJNI( JNIEnv* env,
jobject thiz)
{
return (*env)->NewStringUTF(env, "Hello from JNI !");
}

关于android - JNI 将 C 更改为 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12353424/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com