运行以下命令后,我收到错误
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!");
}
答案 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;
您还可以尝试以下方法:
在标题中#include <stdint.h>
之前添加#include <jni.h>
... 或
添加java编译器标志:-D__int64=int64_t