在cygwin中编译时出错

时间:2015-01-11 20:01:57

标签: 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 个答案:

答案 0 :(得分:27)

以下内容应有助于缓解此问题:

  

Building JNI-based Java Applications under Linux and Cygwin

     

Cygwin Builds的Java mods

     

在Cygwin下,我们创建的名为JNILibrary的JNI(Java Native Interface)库没有构建,因为gcc不知道类型“__int64”。如果你看到这样的话,你就会知道你遇到了问题:

     

构建JNILibrary类和标题....   在/cygdrive/c/j2sdk1.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/j2sdk1.4.2_12/include/win32/jni_md.h:16:警告:数据定义没有类型或存储类

     

如果你这样做,那么你需要编辑/cygdrive/c/j2sdk1.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;

您还可以尝试以下方法:

  1. 在标题中#include <stdint.h>之前添加#include <jni.h> ...

  2. 添加java编译器标志:-D__int64=int64_t