JNI 无法在 NetBeans 上检测到 __int64
JNI cannot detect __int64 on NetBeans
我正在尝试编译本机库以从 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 <jni.h>
之前添加一个 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 <jni.h>
/* 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 specific type
使用 int64_t or uint64_t 等标准类型。在 <cstdint>
中为 C++ 定义,在 <stdint.h>
中为 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 <stdint.h>
#define __int64 int64_t
这与您最初所做的非常相似
首先在构建工具中检查您的 c 编译器。更改它为我修复了错误。
我正在尝试编译本机库以从 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 <jni.h>
之前添加一个 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 <jni.h>
/* 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 specific type
使用 int64_t or uint64_t 等标准类型。在 <cstdint>
中为 C++ 定义,在 <stdint.h>
中为 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 <stdint.h>
#define __int64 int64_t
这与您最初所做的非常相似
首先在构建工具中检查您的 c 编译器。更改它为我修复了错误。