Windows使用javah命令编译class从而得到.h头文件

我有这样一个Java类

package com.jni;

public class HelloJni {
    static {
        try {
            System.loadLibrary("HelloJni");
        } catch (UnsatisfiedLinkError e) {
            e.printStackTrace();
        }
    }
    public native static void sayHello();
}

现在需要将它编译出一个.h头文件。

一、获取class文件

我们首先需要将 .java 文件编译成 .class 文件,有以下几种方式

1. 使用命令

首先进入java文件所在目录,然后使用命令:javac fileName.java,如下所示:
在这里插入图片描述


注意:这样只能编译简单的java类,如果该java类中引用了其他对象,也就是持有其他类的引用的话,就不行啦。
2. 使用IDE来编译(简单方便)

二、编译出 .h 文件

通过前面流程已经得到了class文件,接下来就把它编译成.h头文件。

如果class文件存放在项目目录下,使用如下命令:
在这里插入图片描述

-o 参数的意思是指定输出的.h头文件的名字,这个头文件会生成在执行命令那个目录

如果想要指定输出的位置就用 -d 参数,如下:

javah -d E:\Test\ com.jni.HelloJni

只不过这个命令生成的文件名是包含包名的,会是这样:com_jni_HelloJni.h。自己重命名就行了。


注意:在执行这个命令的时候一定要进入到第一个包名的同级目录去执行,这里就是 com 所在目录。

如果这个class不在项目目录下,就需要增加一个参数 -classpath 去指定项目的路径:
在这里插入图片描述

如果执行 javah 命令报错找不到类或者出现这种错误:

Exception in thread "main" java.lang.IllegalArgumentException: Not a valid class name: .\HelloJni.class
        at com.sun.tools.javac.api.JavacTool.getTask(JavacTool.java:129)
        at com.sun.tools.javac.api.JavacTool.getTask(JavacTool.java:107)
        at com.sun.tools.javac.api.JavacTool.getTask(JavacTool.java:64)
        at com.sun.tools.javah.JavahTask.run(JavahTask.java:503)
        at com.sun.tools.javah.JavahTask.run(JavahTask.java:329)
        at com.sun.tools.javah.Main.main(Main.java:46)

大多数情况都是执行命名时,所处的位置错了。执行这个命令一定要带上包名才行。既然要带上包名,那么执行命令时,就要在包所在位置去执行,要不然就用 -classpath 参数去指定。


技 术 无 他, 唯 有 熟 尔。
知 其 然, 也 知 其 所 以 然。
踏 实 一 些, 不 要 着 急, 你 想 要 的 岁 月 都 会 给 你。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用 javah 工具生成 C 语言头文件的方法如下: 1. 确保你的 Java 环境已经安装完毕,并且已经将 JDK 的 bin 目录加入了系统的 PATH 环境变量中。 2. 打开命令提示符或终端窗口,进入到包含你的 Java 源文件的目录中。 3. 使用 javah 命令生成 C 语言头文件命令的格式如下: ``` javah -jni classname ``` 其中,classname 表示你要生成头文件Java 类的名称。例如,如果你要生成 com.example.HelloWorld 类的头文件,则可以使用如下命令: ``` javah -jni com.example.HelloWorld ``` 4. 生成头文件将会保存在当前目录中,文件名为 classname.h,例如,上述例子中生成头文件名为 com_example_HelloWorld.h。 注意: - 使用 javah 工具生成头文件仅用于 Java Native Interface (JNI) 的 C 和 C++ 代码的编写,不能直接在 C 或 C++ 中使用。 - 使用 javah 工具生成头文件时,必须确保相应的 Java 类已经编译过了。 - 使用 javah 工具生成头文件中的函数名称和参数名称都是 JNI 规范要求的格式,如果你想在 C 或 C++ 中使用头文件,需要先了解 JNI 规范。 ### 回答2: 使用javah工具生成C语言头文件的步骤如下: 1. 确保你已经正确安装了Java开发工具包(JDK)并配置了环境变量。 2. 打开命令提示符(Windows)或终端(Linux/MacOS)。 3. 切换到包含Java类的目录。例如,假设你的类位于包com.test中,你需要先进入包的上级目录,然后执行以下命令: ``` cd path/to/parent/directory ``` 4. 使用javah命令生成C语言头文件命令的基本语法为: ``` javah com.test.ExampleClass ``` 将"com.test.ExampleClass"替换为你想要生成头文件Java类的完整路径。 5. 执行上述命令后,javah工具会自动在当前目录生成一个与Java类名相同的C语言头文件,以.h为后缀。 6. 可以将生成头文件移动到任何你想要的位置,以便在C或C++代码中引用。 需要注意的是,使用javah工具生成C语言头文件只适用于包含native方法的Java类。native方法是使用其他编程语言(如C/C++)编写的方法,通过生成头文件,可以使得Java程序可以调用这些底层语言实现的代码。 ### 回答3: javah 工具是 Java Development Kit (JDK) 提供的一个命令行工具,用于生成Java 类中的本地方法(Native Method)对应的 C 语言头文件。具体的使用步骤如下: 1. 确保你已经正确安装了 JDK。可以通过在命令行中输入 "javac -version" 来验证 JDK 是否已经正确安装和配置。 2. 在命令行中切换到你的 Java 类所在的目录。 3. 编译 Java 类文件。使用 "javac YourClass.java" 命令编译你的 Java 类文件。这会生成相应的 .class 文件。 4. 使用 javah 命令生成 C 语言头文件。在命令行中输入 "javah YourClass" 命令生成与你的 Java 类中的本地方法对应的 C 语言头文件。这将在同一目录下生成一个名为 "YourClass.h" 的头文件。 5. 现在你可以在 C 语言程序中包含这个生成头文件,并实现对应的本地方法。 值得注意的是,自 Java 8 版本以后,新推出了更加现代化的 "javac -h" 选项,此选项已取代了 javah 命令。因此,在更高版本的 JDK 中,你可以使用 "javac -h YourClass.java" 命令生成 C 语言头文件。 总结起来,使用 javah 工具生成 C 语言头文件的步骤就是:编译 Java 类文件,然后使用 javah 命令生成头文件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值