2014-09-12 2 views
0

Я пытаюсь использовать короткий [] и jshortArray между C/JAVA следующим образом в Затмении:Неразрешенные символы NewShortArray и SetShortArrayRegion

JNIEXPORT void JNICALL Java_com_testingForFun_testFunc 
      (JNIEnv *env, jclass clazz, jshort num, jshortArray data) { 
    jshort outCArray[] = {100, 200}; 
    jshortArray outJNIArray = (*env)->NewShortArray(env, 2); // allocate 
    if (NULL == outJNIArray) return; 
    (*env)->SetShortArrayRegion(env, outJNIArray, 0 , 2, outCArray); // copy 
    //return outJNIArray; 
} 

я создал файл заголовка, используя javah и включил его. Тем не менее, Eclipse говорит, что NewShortArray и SetShortArrayRegion не решены, и я не могу построить apk. Однако использование массивов (jshort и short) отлично работает. Я посмотрел в jni.h, и кажется, что другие связанные функции NewShortArray определены, если определена __cplusplus, но я использую C. Я также построил apk в командной строке, используя ndk-build и ant, и я прочитал outJNIArray [0] или [1] = 0 в вызывающей функции, поэтому он тоже не работает. Как решить эту проблему?

Кроме того, Eclipse не может решить ANDROID_LOG_DEBUG в:

__android_log_print(ANDROID_LOG_DEBUG, "FibLib.c", "fibNI(%lld)", n); 

даже если

#include <android/log.h> 

находится в самом начале файла.

+0

Вам нужно добавить 'LOCAL_LDLIBS: = -llog -landroid' на ваш' Android.mk'. – jww

+0

Основываясь на вашем редактировании, это звучит так, как будто ваш 'sysroot' неверен. Или ваши пути заголовка и lib неверны. Пожалуйста, покажите нам что-нибудь, например, ваш 'Android.mk' или вывод вызова компилятора. – jww

ответ

0

Я использовал перезапуск Eclipse и, похоже, выяснил эти проблемы. Но каждый раз, когда я редактирую мой .c-файл, появляются нерешенные ошибки, и мне нужно перезапустить. Это очень раздражает. Любое исправление для этого?

Проблема с outJNIArray [] не установлена ​​- это отдельная тема, поэтому я буду задавать другой вопрос на форуме в будущем, если это необходимо.

+1

* «... проблема outJNIArray [] не установлена» * - вам нужно вызвать 'GetShortArrayElements', чтобы получить указатель на массив. Вам нужно написать модифицированный массив с помощью 'ReleaseShortArrayElements' и флага' 0'. Предполагается, что вы выполняете операции с базовым массивом, такие как изменение значений, а не с помощью специального управления памятью. – jww

+0

Фактически каждый раз, когда я редактирую мой .c файл, появляются неурегулированные ошибки. Кажется, что все, что мне нужно сделать, это перезапустить Eclipse (нет необходимости в чистом), но это очень раздражает. Любое исправление для этого? – tosa

+0

@jww: Я использую (* env) -> SetShortArrayRegion (env, outJNIArray, 0, 2, outCArray); для установки значений в [100, 200], но я верну 0 в приложении. – tosa

Смежные вопросы