在JDK 10中为类文件生成JNI头文件

时间:2018-03-27 06:58:11

标签: java java-native-interface javah java-10

Java Native Interface(JNI)的一个组成部分是通过C头桥接JVM代码和本机代码。生成这些头文件的方法过去非常简单:只需在类文件上调用命令行实用程序javah即可。然后,此过程将为使用native修饰符标记的任何方法生成原型。

从Java 10开始,javah实用程序has been removed及其建议的替换是javac的新标志“-h”。如果有可用的Java源文件,则替换可以正常工作,但是只有编译的类文件可用时才会出现问题。 (引发这个问题的问题是我正在尝试从Scala源生成JNI绑定。我当前的方法是首先编译它们然后在生成的类文件上运行javah。)

在只有已编译的类文件可用的情况下,有没有办法生成C头文件,类似于javah以前的方式?

3 个答案:

答案 0 :(得分:5)

您可以随时通过df = df.groupby('case').agg(['mean','sem']).drop(('condition','sem'), axis=1) df.columns = df.columns.map('_'.join) df = df.reset_index() print (df) case condition_mean var_a_mean var_a_sem var_b_mean var_b_sem 0 1 1.5 0.900 0.020 0.18 0.03 1 2 1.5 0.845 0.055 0.13 0.03 2 3 1.5 0.895 0.045 0.20 0.03 。我知道我知道。这很丑陋,有很多假设,但如果您迫切需要为大量文件生成标题,它可能是唯一的选择。

javap

我敢打赌它可以变得更漂亮。

对我而言,现在,当我慢慢开始考虑不可避免地转向Java 10时,以及所有这些情况,我可能会对不存在的Java源代码感到惊讶,我认为在某些工具处理时并不是一个坏主意我的处置。以防万一。

答案 1 :(得分:5)

我们可以使用gjavah生成JNI头文件。

答案 2 :(得分:-3)

我认为最好的解决方案是安装一个jdk8。 无需卸载jdk10,只需修改环境变量即可。