我让示例 HelloJni 项目正常运行,它使用 C 文件作为 native 代码。我无法获得任何使用 C++ 的简单示例。采用以下 JNI 代码:
#include <jni.h>
#include <string.h>
JNIEXPORT void JNICALL Java_com_test_testActivity_doSomething(JNIEnv * env, jobject obj)
{
}
如果我在 .c 文件中有代码,它可以正常工作。如果我将扩展名更改为 .cpp,它可以正常编译,但在运行时会崩溃(强制关闭)。由于库和方法签名是相同的,所以我不怀疑问题出在 Java 端。
最佳答案
您可能需要用 extern "C"
block 包围您的代码:
extern "C" {
JNIEXPORT ...
}
通过将 extern block 包装在 #if
中,您应该能够制作一个适用于 C 和 C++ 的版本:
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT ...
#ifdef __cplusplus
}
#endif
关于c++ - 使用安卓 NDK 和 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5292190/