JNIEXPORT и JNICALL в Android NDK - PullRequest
       4

JNIEXPORT и JNICALL в Android NDK

7 голосов
/ 25 декабря 2011

При работе с некоторыми источниками, написанными на C ++, я нашел такой макрос:

JNIEXPORT return_type JNICALL имя_функции (...) { Однако образцы Android NDK их не используют. Я прочитал несколько документов из Oracle, но я все еще в замешательстве.

Обязательно ли использовать их при работе с Android NDK?

Одна из причин спросить - подсветка синтаксиса макроразрыва в eclipse CDT:)

Ответы [ 2 ]

12 голосов
/ 27 декабря 2011

По сути, это проблема с Windows, если вы посмотрите на файл jni_md_win32.h, который поставляется с Java jdk оракула, это определение макроса:

/*
 * @(#)jni_md.h 1.14 03/12/19
 *
 * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
 * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 */

#ifndef _JAVASOFT_JNI_MD_H_
#define _JAVASOFT_JNI_MD_H_

#define JNIEXPORT __declspec(dllexport)
#define JNIIMPORT __declspec(dllimport)
#define JNICALL __stdcall

typedef long jint;
typedef __int64 jlong;
typedef signed char jbyte;

#endif /* !_JAVASOFT_JNI_MD_H_ */

В заголовке jni_md_linux.h эти макросы пусты. Поэтому я думаю, что если вы не хотите, чтобы ваш родной код выполнялся в Windows с oracle JVM, вы можете удалить эти макросы.

1 голос
/ 05 января 2013

Убедитесь, что путь включения платформы, которую вы хотите получить из Android NDK, был добавлен в C \ C ++ вашего проекта.Это можно сделать следующим образом:

  • Открыть свойства проекта
  • Развернуть C / C ++ Общие
  • Нажмите Пути и символы
  • В том числераздел Добавьте путь к папке include нужной платформы NDK (например, $ {ANDROID_NDK_HOME} \ platform \ android-9 \ arch-arm \ usr \ include)
...