san*_*nti 6 java-native-interface android opencv javah
当我在java类中编译本机方法javah
生成JNI头文件时,我对jni有一个恼人的问题.
如果该类使用了第三方软件包,例如:org.opencv.core.Mat,那么javah
将显示无法找到org.opencv.core.Mat类的错误.
OpenCV示例代码如下:
package org.opencv.samples.fd;
import org.opencv.core.Mat;
import org.opencv.core.MatOfRect;
public class DetectionBasedTracker
{
public DetectionBasedTracker(String cascadeName, int minFaceSize) {
mNativeObj = nativeCreateObject(cascadeName, minFaceSize);
}
public void start() {
nativeStart(mNativeObj);
}
public void stop() {
nativeStop(mNativeObj);
}
public void setMinFaceSize(int size) {
nativeSetFaceSize(mNativeObj, size);
}
public void detect(Mat imageGray, MatOfRect faces) {
nativeDetect(mNativeObj, imageGray.getNativeObjAddr(), faces.getNativeObjAddr());
}
public void release() {
nativeDestroyObject(mNativeObj);
mNativeObj = 0;
}
private long mNativeObj = 0;
private static native long nativeCreateObject(String cascadeName, int minFaceSize);
private static native void nativeDestroyObject(long thiz);
private static native void nativeStart(long thiz);
private static native void nativeStop(long thiz);
private static native void nativeSetFaceSize(long thiz, int size);
private static native void nativeDetect(long thiz, long inputImage, long faces);
}
Run Code Online (Sandbox Code Playgroud)
首先,我使用了命令
javah -classpath bin/classes -bootclasspath (the directory of android.jar) -d jni (packageName + ClassName) , shows the error "can't find the org.opencv.core.Mat
Run Code Online (Sandbox Code Playgroud)
然后我修改了命令
javah - classpath bin/classes - bootclasspath (the dir of android.jar) ; (the dir of the opencv lib jar) -d jni ..." ", this time it shows error
Run Code Online (Sandbox Code Playgroud)
例外
Exception in thread "main" java.lang.IllegalArgumentException: Not a valid class
name: E:\Computer_Language\Java\soft_android\OpenCV-2.4.3-rc-android-sdk\OpenCV
-2.4.3-rc-android-sdk\sdk\java\bin\opencv library - 2.4.3.jar
at com.sun.tools.javac.api.JavacTool.getTask(JavacTool.java:177)
at com.sun.tools.javac.api.JavacTool.getTask(JavacTool.java:68)
at com.sun.tools.javah.JavahTask.run(JavahTask.java:509)
at com.sun.tools.javah.JavahTask.run(JavahTask.java:335)
at com.sun.tools.javah.Main.main(Main.java:46)
Run Code Online (Sandbox Code Playgroud)
我认为,添加opencv lib目录-bootclasspath
是有用且必要的.错误是因为我只是添加了两个路径-bootclasspath
或格式是错误的?
真的很困惑.请给点帮助,谢谢!
这就是我做的:
1.打开命令行,键入(project)/ bin/classes:2.type:javah -classpath(opencv4android sdk path)/ java/bin/classes :(你的项目位置)/ bin/classes -jni(你的java)包含本机库接口的类文件)
在我的项目中.我做了:
javah -classpath/home/zijun/Dev/adt/OpencvAndroid/sdk/java/bin/classes:/ home/zijun/workspace/LocTM/bin/classes -jni com.brainport.loctm.TMatching
这适用于Linux Ubuntu 12.04.02 64位操作系统
归档时间: |
|
查看次数: |
5219 次 |
最近记录: |