Ошибка при компиляции в cygwin

После выполнения следующей команды, я получаю сообщение об ошибке

gcc prog.c -o prog -I"C:/Program Files/Java/jdk1.8.0_25/include" -I"C:/Program Files/Java/jdk1.8.0_25/include/win32"

error: unknown type name '_int64'

Скажите, пожалуйста, как исправить эту ошибку.

код

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

jstring Java_com_mindtherobot_samples_ndkfoo_NdkFooActivity_invokeNativeFunction(
        JNIEnv* env, jobject javaThis) {
    return (*env)->NewStringUTF(env, "Hello from native code!");
}

Ответ 1

следующее решение должно помочь устранить эту проблему:

Создание Java-приложений на основе JNI в Linux и Cygwin

Моды Java для Cygwin Builds

В Cygwin библиотека JNI (Java Native Interface), которую мы создали, называется JNILibrary, не создает, потому что gcc не знает о типе "__int64". Youll знает, что вы попали в проблему, если вы видите что-то вроде этого:

Создание класса и заголовка JNILibrary.... В файле, включенном в /cygdrive/c/j 2sdk1.4.2_12/include/jni.h:27, от JNICrunch-common.h: 25,
от JNICrunchHWInfo.c: 31:
/cygdrive/c/j2sdk1.4.2_12/include/win32/jni_md.h:16: ошибка: проанализировать ошибку перед "jlong". /cygdrive/c/j 2sdk1.4.2_12/include/win32/jni_md.h:16: предупреждение: определение данных не имеет типа или класса хранения

Если вы нажмете это, вам нужно отредактировать /cygdrive/c/j 2sdk1.4.2_12/include/win32/jni_md.h и изменить следующие строки:

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

в

typedef long jint;
#ifdef __GNUC__
typedef long long jlong;
#else
typedef __int64 jlong;
#endif
typedef signed char jbyte;

Вы также можете попробовать следующее:

  • Добавить #include <stdint.h> до #include <jni.h> в заголовке... или

  • Добавьте флаг java-компилятора: -D__int64=int64_t