2011-03-13 21 views
5

Obtuve el proyecto HolaJni de ejemplo en funcionamiento, que usa un archivo C para el código nativo. No he podido obtener ejemplos simples que trabajen con C++. Tome el siguiente código JNI:Usando Android NDK y C++

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

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

} 

Si tengo el código en un archivo .c, que funciona bien. Si cambio la extensión a .cpp compila bien, pero se dispara cuando se ejecuta (fuerza se cierra). Como la biblioteca y la firma del método son iguales, no sospecho que el problema esté en Java.

Respuesta

9

Es posible que necesite para rodear su código con una extern "C" bloque:

extern "C" { 

    JNIEXPORT ... 

} 

usted debería ser capaz de hacer una versión que funcione en C y C++, envolviendo el bloque extern en #if:

#ifdef __cplusplus 
extern "C" { 
#endif 

JNIEXPORT ... 

#ifdef __cplusplus 
} 
#endif 
+0

Pensé que era algo simple ... ¡muchas gracias! – Philip

1

Java_com_test_testActivity_doSomething tendrá que ser extern "C".

1

intente poniendo extern "C" alrededor de las definiciones de funciones exportadas.