我想将我的 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)