【问题标题】:JNI eclipse Javah auto generateJNI eclipse Javah 自动生成
【发布时间】: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 中的构建脚本驱动所有这些,而不是从命令行运行它。构建脚本给你可重复的结果,手动执行让你头疼。

标签: java eclipse opencv


【解决方案1】:

轻松将您的类路径指向您的 opencv java 类所在的位置。 javah 在其类路径中需要这个类。

org.opencv.core.Mat

所以,用这个轻松喂它。如果你从official opencv Download center 下载了opencv4android 并将其解压到$opencv4android 中,那么你会发现这个。 $opencv4android/sdk/java/src

   -$opencv4android/
    |
    |
     ------sdk
           |
            -java
             |
               - src
                 |
                  - org
                    |
                     -- opencv
                        |
                        -- android
                        -- calib3d
                        -- core
                          |
                           -- Algorithm.java
                           -- Core.java
                              ......

                        -- engine
                        -- features2d
                        -- imgcodecs
                        -- ml
                        -- objdetect
                        -- photo
                        -- utils
                        -- video
                        -- videoio

仅供参考,我在 Windows 8 上使用 opencv 3.0.0 版本和 Android Studio。 这就是 javah 正在寻找的全部内容。

Windows 用户

打开你的终端导航到以下地址

[项目路径]\app\src\main

并编写以下代码行:

javah -d jni -classpath [path to your android sdk]\platforms\android-19\android.jar;[path to your opencv4android]\sdk\java\src;..\..\build\intermediates\classes\debug com.example.test.NativeLib

现在 javah 可以访问所有的 opencv 类。

Linux 用户

请注意,在写出类路径中的类时,您应该使用:(冒号)而不是;(分号)来分隔搜索地址。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 2016-05-05
    • 2012-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多