JNI无法在NetBeans上检测到__int64
我正在尝试编译一个本机库,以便在java(使用JNI)中使用它。 我已经按照本教程: https : //cnd.netbeans.org/docs/jni/beginning-jni-win.html
错误
当我尝试编译时,我有这个错误(见第4行):
[...] In file included from ../../Progra~2/Java/jdk1.8.0_91/include/jni.h:45:0, from HelloWorldNative.h:3, from HelloWorldNative.c:6: ../../Progra~2/Java/jdk1.8.0_91/include/win32/jni_md.h:34:9: error: unknown type name '__int64' typedef __int64 jlong; ^ nbproject/Makefile-Debug.mk:66: recipe for target 'build/Debug/Cygwin-Windows/HelloWorldNative.o' failed [...]
我可以在#include
之前添加一个typedef long long __int64
来解决这个错误,但我认为有些东西我做错了。
代码
这是代码:
标头文件:
/* DO NOT EDIT THIS FILE - it is machine generated */ typedef long long __int64; // <============ Why do I need to do this? #include /* Header for class helloworld_Main */ #ifndef _Included_helloworld_Main #define _Included_helloworld_Main #ifdef __cplusplus extern "C" { #endif /* * Class: helloworld_Main * Method: nativePrint * Signature: ()V */ JNIEXPORT void JNICALL Java_helloworld_Main_nativePrint (JNIEnv *, jobject); #ifdef __cplusplus } #endif #endif
源文件:
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ #include "HelloWorldNative.h" JNIEXPORT void JNICALL Java_helloworld_Main_nativePrint (JNIEnv *env, jobject _this){ }
__int64
是Visual Studio 特定类型
使用标准类型,如int64_t或uint64_t 。 在C ++的
和C的
中定义
您可以在JNI常见问题解答中找到错误的精确解决方案:
http://www.oracle.com/technetwork/java/jni-j2sdk-faq-141732.html
Your compiler might not like __int64 in jni_md.h. You should fix this by adding: #ifdef FOOBAR_COMPILER #define __int64 signed_64_bit_type #endif where signed_64_bit_type is the name of the signed 64 bit type supported by your compiler.
所以你应该使用:
#define __int64 long long
要么:
#include #define __int64 int64_t
这与你最初的做法非常相似
首先在构建工具中检查您的c编译器。 改变那个为我修复错误。