Все примеры 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.
Есть идеи, как заставить эту вещь скомпилироваться?
Спасибо