S.S*_*ota 31 java java-native-interface javah
我试图在Windows 7操作系统上从命令行使用javah工具创建头文件,但我一直都失败了.
我有不同的方法,甚至从oracle阅读javah工具的文档,但他们没有帮助克服这个问题.
我的类file(hellojni.class)和java file(hellojni.java)都在D:\驱动器的根目录中.
但每当我运行javah工具时它会给我一个错误:
找不到hellojni的类文件
我尝试提供类路径,但没有得到任何头文件.
hen*_*lst 104
我怀疑问题是您的类有一个包,并且您尝试使用类文件而不是包根目录运行该命令.
Samhain的例子很有效,因为他MyClass.java没有包装,而我怀疑你的包装没有.
例如,假设我们有以下文件 c:\src\com\example\MyClass.java
package com.example;
public class MyClass {
public native void myMethod();
}
Run Code Online (Sandbox Code Playgroud)
转到命令行并执行以下命令:
c:\src\com\example>javac MyClass.java
c:\src\com\example>dir
Directory of C:\src\com\example
2015-02-23 03:17 PM <DIR> .
2015-02-23 03:17 PM <DIR> ..
2015-02-23 03:20 PM 219 MyClass.class
2015-02-23 03:17 PM 84 MyClass.java
c:\src\com\example>javah MyClass
Error: Could not find class file for 'MyClass'.
c:\src\com\example>cd c:\src
c:\src>javah com.example.MyClass
c:\src>dir
Directory of C:\src
2015-02-23 03:18 PM <DIR> .
2015-02-23 03:18 PM <DIR> ..
2015-02-23 03:16 PM <DIR> com
2015-02-23 03:18 PM 449 com_example_MyClass.h
Run Code Online (Sandbox Code Playgroud)
成功!
Abd*_*eem 10
在尝试为 Java 本机接口 (JNI) 实现分两步编译和生成 C/C++ 头文件时,我也遇到了同样的问题(我怀疑这就是您试图从文件名中执行的操作)。为我解决的是使用以下命令将两个步骤合二为一:
javac YOUR_CLASS_FILE_NAME.java -h .
Run Code Online (Sandbox Code Playgroud)
点 (.) 包括当前路径。此命令只能从 Java 8 开始运行。
javah -classpath path_to_jars_or_classes com.my.package.MyClass.
如果使用-verbose运行javah -verbose -classpath path_to_jars_or_classes com.my.package.MyClass,它将显示用于查找类的搜索路径.您可以使用它来验证是否列出了您的目录D:\.
请参阅javah文档
示例:文件名为MyClass.java,内部类名称为MyClass.没有错误.
C:\>more MyClass.java
public class MyClass
{
public static void doSomething(int b)
{
return;
}
}
C:\>javac MyClass.java
C:\>javah -classpath C:\ MyClass
C:\>dir *.h
Volume in drive C has no label.
Volume Serial Number is XXXX-XXXX
Directory of C:\
10/07/2013 11:46 AM 242 MyClass.h
1 File(s) 242 bytes
0 Dir(s) X bytes free
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29145 次 |
| 最近记录: |