小编Geo*_*apa的帖子

无法使用 JDK11 javac 为仅变量类文件创建 JNI 头文件

我想将我的 java 程序从 JDK8 迁移到 JDK11。我解决了由 JDK11 中删除的 API 引起的构建错误。

但是,我遇到了 JNI 相关的问题。

为了解释这个问题,让我们假设我们有以下 java 文件。

package mypkg;

public class JNITest {
    static final int X_MINOR_MASK = 1;
}
Run Code Online (Sandbox Code Playgroud)

如您所见,它只有一个 int 变量,并且没有定义任何方法。

当我使用JDK8生成JNI头文件时,我执行以下步骤。
1) 编译

javac -sourcepath ./mypkg -d $OUTPUT_DIR ./mypkg/JNITest.java
Run Code Online (Sandbox Code Playgroud)

2)生成标题

javah -jni -d $OUTPUT_DIR/jni -cp ./$OUTPUT_DIR mypkg.JNITest
Run Code Online (Sandbox Code Playgroud)

然后,它生成一个头文件(mypkg_JNITest.h),如下所示:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class mypkg_JNITest */

#ifndef _Included_mypkg_JNITest
#define _Included_mypkg_JNITest
#ifdef __cplusplus
extern "C" {
#endif …
Run Code Online (Sandbox Code Playgroud)

java java-native-interface javac java-8 java-11

7
推荐指数
1
解决办法
749
查看次数

标签 统计

java ×1

java-11 ×1

java-8 ×1

java-native-interface ×1

javac ×1