使用Android NDK和C++

6

我已经成功运行了使用C文件作为本地代码的HelloJni示例项目。但是,我无法将任何简单的C++示例代码运行起来。以下是JNI代码:

#include <jni.h>
#include <string.h>

JNIEXPORT void JNICALL Java_com_test_testActivity_doSomething(JNIEnv * env, jobject obj)
{

}

如果我的代码在.c文件中,它可以正常工作。如果我把扩展名改为.cpp,编译时没有问题,但运行时会崩溃(强制关闭)。由于库和方法签名都是相同的,所以我不认为问题出在Java端。

3个回答

10

你可能需要用 extern "C" 块来包含你的代码:

extern "C" {

    JNIEXPORT ...

}

您应该能够通过将extern块包装在#if中来创建适用于C和C ++的版本:

#ifdef __cplusplus
extern "C" {
#endif

JNIEXPORT ...

#ifdef __cplusplus
}
#endif

为什么我们需要添加 extern "C"? - nutella_eater

1

Java_com_test_testActivity_doSomething需要使用extern "C"。


1
尝试在导出的函数定义周围放置 extern "C"。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接