我一直在尝试使用以下命令创建.h文件:

javah -jni MyClass


当然做完之后

javac MyClass.java


这不会给我任何错误消息...

但是,每当执行javah -jni命令时,都会出现以下错误:

Exception in thread "main" java.io.IOException: can't find class file
MyClass.class in
java.net.URLClassLoader{urls=[file:/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64/jre/lib/rt.jar],
parent=gnu.gcj.runtime.SystemClassLoader{urls=[file:./], parent=gnu.gcj.runtime.ExtensionClassLoader{urls=[], parent=null}}}
               at gnu.classpath.tools.javah.Main.getClass(libgcj-tools.so.14)
               at gnu.classpath.tools.javah.Main.parseClasses(libgcj-tools.so.14)
               at gnu.classpath.tools.javah.Main.run(libgcj-tools.so.14)
               at gnu.classpath.tools.javah.Main.main(libgcj-tools.so.14)


顺便说一下,我在Windows 10 PC上工作

最佳答案

看一下MyClass内部定义的包。可能是您使用了某些软件包名称,然后仅传递了类名称-这将无法工作。

确保可通过CLASSPATH使用该类。

或者,您可以通过javah的-cp参数传递类位置(与包一起)。

在这里看看:

http://jnicookbook.owsiak.org/recipe-No-001/

您可以在这里找到完全正常工作的晚餐简单示例。

它应该开箱即用。做就是了:

git clone https://github.com/mkowsiak/jnicookbook.git
cd jnicookbook/recipeNo001
make; make test


如果您在这里仍然有问题。您的安装可能不完全正常。

如果它适合您,只需确保使用类似的编译标志即可在Makefile中找到

玩JNI :)

更新:

正如上面评论中已经指出的那样,也许您可​​以切换到Oracle的JDK?

如果使用Oracle的JDK,则不会出现此类问题。您可以使用javah轻松生成C标头

如果您必须坚持使用GCJ(例如旧版代码),请尝试使用

javah -jni -cp . Main

10-06 03:29