Использование C ++ с Android ndk / jni

Все образцы ndk используют только базовые функции C, объявленные как extern в заголовке и определенные в файле cpp. Затем после включения файла заголовка в файл C, содержащий обратный вызов jni, все работает нормально.

Можно ли использовать классы C ++ с android ndk? Мое приложение не будет нативным действием, оно по-прежнему будет иметь важную часть Java, но оно будет вызывать собственный код C для вычислений с интенсивным использованием ЦП (уже написанного на C ++, с классами и другими материалами C ++).

Вот это пока мой hello-world, как strcuture:

Файл "first.h"

#ifndef FIRST_H
#define FIRST_H

class Test
{};

#endif /* FIRST_H */

Файл "second.cpp"

#include <jni.h>
#include "first.h"

#ifdef __cplusplus
extern "C" {
#endif

jint Java_com_example_twolibs_TwoLibs_add( JNIEnv*  env,
                                      jobject  this,
                                      jint     x,
                                      jint     y )
{
    Test t;
    return 0;
}

#ifdef __cplusplus
}
#endif

И, наконец, Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := libtwolib-second
LOCAL_SRC_FILES := second.cpp

include $(BUILD_SHARED_LIBRARY)

Довольно простой, но он не компилируется. Включение second.cpp в файл .c вызывает ошибку при включении файла заголовка, я думаю, это потому, что это не файл C ++.

error: expected '=', ',', ';', 'asm' or '__attribute__' before 'Test'

Создание .cpp вызывает следующую ошибку:

make: *** No rule to make target `/cygdrive/c/android-ndk-r5c/samples/twolibs/jni/second.c', needed by `/cygdrive/c/android-ndk-r5c/samples/two-libs/obj/local/armeabi/objs/twolib-second/second.o'.  Stop.

Любая идея, как я могу скомпилировать эту штуку?

Спасибо

34
задан user745189 22 June 2011 в 05:44
поделиться