2011-03-13 74 views
5

我得到了示例HelloJni項目工作,它使用C文件作爲本機代碼。我一直無法得到任何使用C++的簡單例子。採取以下JNI代碼:使用Android NDK和C++

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

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

} 

如果我有一個.c文件中的代碼,它工作正常。如果我將擴展名更改爲.cpp,則編譯良好,但在運行時強行關閉(強制關閉)。由於庫和方法簽名都是相同的,所以我不認爲Java方面存在問題。

回答

9

您可能需要與extern "C"塊包圍代碼:++在#if包裹的extern塊

extern "C" { 

    JNIEXPORT ... 

} 

您應該能夠使一個版本將在C和C的工作:

#ifdef __cplusplus 
extern "C" { 
#endif 

JNIEXPORT ... 

#ifdef __cplusplus 
} 
#endif 
+0

我覺得這很簡單......非常感謝! – Philip 2011-03-13 20:50:58

1

Java_com_test_testActivity_doSomething需要是extern「C」。

1

嘗試在導出的函數定義周圍放置extern「C」。