使用Android NDK和C++

Phi*_*lip 6 c++ android android-ndk

我得到了示例HelloJni项目,它使用C文件作为本机代码.我无法使用C++获得任何简单的示例.采用以下JNI代码:

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

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

}
Run Code Online (Sandbox Code Playgroud)

如果我在.c文件中有代码,它可以正常工作.如果我将扩展名更改为.cpp,它编译得很好,但在运行时会爆炸(强制关闭).由于库和方法签名在任何一种方式都是相同的,我不怀疑问题是在Java端.

Mat*_*lis 10

您可能需要用extern "C"块包围代码:

extern "C" {

    JNIEXPORT ...

}
Run Code Online (Sandbox Code Playgroud)

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

#ifdef __cplusplus
extern "C" {
#endif

JNIEXPORT ...

#ifdef __cplusplus
}
#endif
Run Code Online (Sandbox Code Playgroud)