javah 命令小结
Javah
获取您的 Java 源文件并生成 C 头文件,其中包含您的 Java 代码中所有本机方法的 JNI 存根(stub)。如果您正在生成一个类的 JNI 存根,而且您已经把这个类定义为包的一部分,那么您 必须 指定完全限定的类名。”
现在总结如下:
TestHello.java所在的的目录如下:
E:\rcpworkspace\com.dlut.datasender\test\com\dlut\datasender\communication
TestHello.java
- package com.dlut.datasender.communication;
- public class TestHello {
- static {
- System.loadLibrary("TestHello");
- }
- public static native void hello(String msg);
- public static void main(String[] args) {
- hello("Hello,Kimm!");
- }
- }
1.运行cmd命令,cd到TestHello.java所在的目录下面,输入:
- javac TestHello.java
没有出错的话会在当前目录(E:\rcpworkspace\com.dlut.datasender\test\com\dlut\datasender\communication)下面生成TestHello.class文件。
2.cd到E:\rcpworkspace\com.dlut.datasender\test\(source folder根目录)
输入: set classpath=E:\rcpworkspace\com.dlut.datasender\test 回车
3.再输入:javah -jni com.dlut.datasender.communication.TestHello 回车
这时候在E:\rcpworkspace\com.dlut.datasender\test下面会生成一名为com_dlut_datasender_communication_TestHello.h的文件
4.重命名com_dlut_datasender_communication_TestHello.h为TestHello.h即可
javah
从 Java 类生成 C 头文件和 C 源文件。这些文件提供了连接胶合,使 Java 和 C 代码可进行交互。
结构
javah [ options ] fully-qualified-classname. . . javah_g [ options ] fully-qualified-classname. . .
说明
javah
生成实现本地方法所需的 C 头文件和源文件。C 程序用生成的头文件和源文件在本地源代码中引用某一对象的实例变量。.h 文件含有一个 struct 定义,该定义的布局与相应类的布局平行。该 struct 中的域对应于类中的实例变量。
头文件名以及在头文件中所声明的结构名都来源于类名。如果传给 javah 的类是在某个包中,则头文件名和结构名前都要冠以该包名。下划线 (_) 用作名称分隔符。
缺省情况下,javah 为每个在命令行中列出的类都创建一个头文件,且将该文件放在当前目录中。用 -stubs 选项创建源文件。用 -o 选项将所有列出类的结果串接成一个单一文件。
新的平台相关方法接口(Java 平台相关代码接口 (JNI))不需要头文件信息或 stub 文件。javah 仍可用于生成 JNI 风格的本地方法所需的本地方法函数原型。javah 在缺省情况下生成 JNI 风格的输出并将结果放在 .h 文件中。
javah_g 是 javah 的非优化版本,适合于与 jdb 之类的调试程序一起使用。
选项
-o 输出文件
- 将命令行中列出的所有类的头文件或源文件串接到 输出文件中。 -o 或 -d 两个选项只能选择一个。
- -d 目录
- 设置 javah 保存头文件或 stub 文件的目录。 -d 或 -o 两个选项只能选择一个。
-stubs- 使 javah 从 Java 对象文件生成 C 声明。
-verbose- 指明长格式输出,并使 javah 将所生成文件的有关状态的信息输出到标准输出设备中。
-help- 输出 javah 用法的帮助信息。
-version- 输出 javah 的版本信息。
-jni- 使 javah 创建一输出文件,该文件包含 JNI 风格的本地方法函数原型。这是缺省输出,所以 -jni 的使用是可选的。
-classpath 路径- 指定 javah 用来查询类的路径。如果设置了该选项,它将覆盖缺省值或 CLASSPATH 环境变量。目录用分号分隔。因此, 路径的一般格式是:
-bootclasspath 路径.;<您的路径>例如:
.;C:\users\dac\classes;C:\tools\java\classes- 指定加载自举类所用的路径。缺省情况下,自举类是实现核心 Java 平台的类,位于 jre\lib\rt.jar 和 jre\lib\i18n.jar 中。
-old- 指定应当生成旧 JDK1.0 风格的头文件。
-force- 指定始终写输出文件。
环境变量
CLASSPATH
- 用于为系统提供用户定义类的路径。目录用分号分隔,例如:
.;C:\users\dac\classes;C:\tools\java\classes