【发布时间】:2014-09-12 03:49:23
【问题描述】:
您好,我正在使用 javah 生成头文件。我尝试了以下两种方法,但它们都不适合我。
方法一:在 bin/classes 中,我使用
javah -jni com.example.test.NativeLib
它报告:
Error: Could not find class file for 'com.example.test.NativeLib'.
但有时它对我有用(有人知道为什么吗?)。
那我就用下面这个也很流行的方式:在src/中
javah -classpath ../bin/classes -jni com.example.test.NativeLib
它报告:
Error: Class org.opencv.core.Mat could not be found.
然后我添加 OpenCV 类路径:
javah -classpath ../bin/classes/:D:/OpenCV/OpenCV-2.4.9-android-sdk/sdk/java/bin/classes -jni com.example.test.NativeLib
它报告:
Error: Could not find class file for 'com.example.test.NativeLib'.
再次。
有人知道为什么吗?
【问题讨论】:
-
Windows 中的 CLASSPATH 是分号分隔的,而不是冒号分隔的,因此您的最后一个 javah 没有您期望的类路径。尝试
../bin/classes/;D:/OpenCV/OpenCV-2.4.9-android-sdk/sdk/java/bin/classes- 我也不确定/的方向,但不应该是\? -
我试过:javah -classpath ../bin/classes; D:/OpenCV/OpenCV-2.4.9-android-sdk/sdk/java/bin/classes -jni test.DenseSiftNativeLib。它报告:-bash: D:/OpenCV/OpenCV-2.4.9-android-sdk/sdk/java/bin/classes: 是一个目录。
-
现在你有两个问题。您使用的是
bash而不是cmd,它将;解释为命令的结尾,因此您必须引用您传递的类路径,所以javah -classpath "../bin/classes/;D:/OpenCV/OpenCV-2.4.9-android-sdk/sdk/java/bin/classes" -jni com.example.test.NativeLib -
解决了!谢谢。你知道为什么它有时适用于第一种方法吗?
-
这可能与您调用
javah时的陈旧路径和构建树的状态有关。我对您的构建环境知之甚少,无法确定这一点。不过,一般来说,您应该从 eclipse 中的构建脚本驱动所有这些,而不是从命令行运行它。构建脚本给你可重复的结果,手动执行让你头疼。