java - 生成 Java JNI header

标签 java header java-native-interface

我想做的就是使用 JDK Javah.exe 程序生成一个 JNI 头文件,但无论我尝试什么,我都会不断收到错误消息“错误:找不到 ddg.ndkTest.NativeLib 的类文件'"(其中 ddg.ndkTest 是命名空间,NativeLib 是 java 类文件)。此外,请注意,为了进一步简化流程,我已将整个 Android 项目复制到 Java 目录。

我尝试了以下命令,但均无效:

  • javah -jni ddg.ndkTest.NativeLib
  • javah -verbose -jni -classpath\NDKTest\bin\classes ddg.ndkTest.NativeLib
  • C:\Program Files\Java\jdk1.7.0_02\bin>javah.exe -jni -classpath\NDKTest\bin\classes\ddg.ndkTest.NativeLib

如果调用我的包; “ddg.ndkTest”,我的类(class)是; “NativeLib.java”,我上面的类路径是正确的。我应该在我的命令窗口中写什么?

最佳答案

Java 更新 >= Java9

Java9 以来,命令 javah 已被标记为 deprecation warning 并且从 Java10 开始,它已被从 JDK 中删除,因为它的功能现在包含在 javac 命令中。

因此,为了从 Java9 执行同样的操作,您应该运行: javac -h 。 NativeLib.java

请注意,我假设您在正确的目录中

除了命令之外的主要区别在于,现在 JNI header 创建的目标是 .java 文件中的源代码,而不是编译后的 .class

-h directory Specifies where to place generated native header files.

When you specify this option, a native header file is generated for each class that contains native methods or that has one or more constants annotated with the java.lang.annotation.Native annotation. If the class is part of a package, then the compiler puts the native header file in a subdirectory that reflects the package name and creates directories as needed.

https://docs.oracle.com/en/java/javase/11/tools/javac.html#GUID-AEEC9F07-CB49-4E96-8BC7-BCC2C7F725C9

关于java - 生成 Java JNI header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11312976/

相关文章:

java - Spring Web MVC : How to change viewResolver prefix according to client request

java - Spring Batch 在有效的 csv 标题之前写入行

C;标题和代码

css - 滚动体*在*下方*一个透明的标题 div?

c++ - Varargs类方法头转换错误

java - 在 Linux 上的 Eclipse RCP 应用程序中加载 native 库

android - 在 JNI 方法上返回一个字符串数组

Java 正则表达式注释和 HTTP 正文 POST 的要求

java - 使用 JNI 访问字段

java - UFT 14.0 : Java menu is not displayed when clicked