原因
在 macOS 上,javah 工具确实从 JDK 9 开始被标记为废弃,并在 JDK 10 及更高版本中完全被移除。因此,如果你使用的是 JDK 10 或更高版本,你将无法在 JDK 的安装目录中找到 javah 工具。
JNI(Java Native Interface)头文件的场景,你可以使用 javac 命令的 -h 选项来替代 javah。
使用 javac 生成 JNI 头文件的步骤:
编写包含 native 方法的 Java 类:
首先,你需要一个包含 native 方法的 Java 类。
确保你已经正确地声明了 native 方法,并使用 System.loadLibrary() 加载了本地库。
编译 Java 类:
使用 javac 命令编译你的 Java 类,但不包括 -h 选项。这个步骤只是为了确保你的 Java 类没有编译错误。
生成 JNI 头文件:
然后,使用 javac 命令的 -h 选项来指定一个目录,用于生成 JNI 头文件。例如:bash
'''
javac -h /path/to/output/directory YourJavaClass.java
'''
生成Java 类相对应的 JNI 头文件, 将放在 /path/to/output/directory 目录下。
实现本地方法:
使用 C 或 C++ 在你的本地库中实现这些 native 方法。确保你的本地方法签名与 JNI 头文件中定义的签名相匹配。
编译和链接本地库:
使用适合你的开发环境的工具链(如 Xcode、Clang 或 gcc)来编译和链接你的本地库。
在 Java 中加载本地库:
在 Java 代码中,使用 System.loadLibrary() 来加载你的本地库。确保库名与你在本地代码中定义的库名一致(不包括前缀 "lib" 和后缀 ".dylib" 或 ".so")。
请注意,-h 选项生成的头文件可能包含一些额外的宏和类型定义,这些在手动编写 JNI 代码时可能不需要。但是,使用自动生成的头文件可以确保你的 JNI 签名与 Java 方法签名完全匹配,从而减少错误的可能性。