我一直在尝试使用以下命令创建一个.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上工作
发布于 2017-05-01 14:16:34
看一下在MyClass中定义的包。这可能是因为你使用了一些包名,然后你只传递了类名--这是行不通的。
确保该类可通过CLASSPATH使用。
或者,您可以通过javah的-cp参数传递类位置(与包一起)。
看看这里:
http://jnicookbook.owsiak.org/recipe-No-001/
你可以在那里找到完全工作的,超级简单的样本。
它应该开箱即用。只需这样做:
git clone https://github.com/mkowsiak/jnicookbook.git
cd jnicookbook/recipes/recipeNo001
make; make test如果你还有问题的话。可能是您的安装不太正常。
如果它对您有效,只需确保使用与您可以在Makefile中找到的相似的编译标志
享受JNI带来的乐趣:)
更新:
正如上面评论中所指出的,也许您可以切换到Oracle的JDK?
如果使用Oracle的JDK,就不会出现这种问题。您可以使用javah轻松地生成C标头
如果您必须坚持使用GCJ (例如,遗留代码),可以尝试使用
javah -jni -cp . Mainhttps://stackoverflow.com/questions/43711036
复制相似问题