当前位置: 代码迷 >> 综合 >> javah
  详细解决方案

javah

热度:20   发布时间:2023-12-22 02:51:52.0
  1. 说明

    • 功能

      • javahnative函数转换生成c头文件和源代码.
    • C

      • 可以用C代码(native source code)控制对象实例.
      • 入参一般是Env环境信息(全局函数等),object对象,即类的实例.
    • .h中结构体

      • 如果存在,则对应类的结构.
      • struct字段对应类的字段.
    • 函数名字

      • Java_${package_name}_${function_name}.
    • 生成源代码

      • -stubs生成,-o则将结果汇总到一个文件.
    • JNI:Java Native Interface

      • 本身不需要头文件和源代码.只需要so.
      • 但是生成出来方便开发者进行开发JNI风格的代码.
      • 默认仅仅生成头文件.
  2. 格式

    • 完整

      • javah [ options ] fully-qualified-class-name ...
    • [options]

      • 可选参数.
    • fully-qualified-class-name

      • 将要被转化成c头文件或源代码类的完整类名.
      • ${package_name}.${class_name}比如java.util.lang.String.
      • 注意:没有.java后缀名.
      • 编译路径一般在最顶层.即包含package_name的目录.
      • 参考链接
    • 案例

      • 文件:/home/user/com/example/JavaHowTo.class
      • 包:com.example.JavaHowTo
      • 编译位置:/home/user
  3. 选项

    • -o output_file

      • 将生成的所有头文件或源代码拼接到一个输出文件.
      • -o,-d只能用一个,本身是冲突的.
    • -d directory

      • 将生成的头文件和源代码输出到一个文件夹.
      • -d,-o只能用一个.
    • -stubs

      • 生成C代码.
    • -verbose

      • 输出生成文件的信息到stdout.
    • -jni

      • 生成JNI格式的函数,默认.
      • 所以这个选项可选.
    • -classpath path

      • 指定查找给定class的位置.
      • 不指定用环境变量CLASSPATH.即-classpath > CLASSPATH
      • path格式是:分割,windows;分割.
      • path特殊,*表示.jar|.JAR结尾.
    • -bootclaspath

      • 加载引导类的路径.一般是jre/lib/rt.jar和几个其他JAR文件。
    • -force

      • 总是写入,而不是存在就不生成.
  4. 参考

    • oracle说明文档