本次需求与问题
我用javah生成.h头文件之后,要生成相应的cpp文件来实现头文件里边定义的方法。看到的很多示例都是在Java工程下边用命令行的方式来生成cpp的dll。
比如说http://blog.csdn.net/jianjian1992/article/details/46724043
那问题就来了,如果只是简单地使用c++来实现,那就在这个cpp里边写就好了,可是如果我要用到其它的库,比如说opencv,那该怎么办呢?在c++工程里边使用opencv可是需要各种配置的呀,现在我在一个java工程目录下,还只有一个cpp,这可肿么办啊!!
一个idea
An idea occurs to me:把这个.cpp和.h都加到一个已经配好的C++工程里边,然后在这个工程里边生成dll,这样可以吗?
实验
首先把.h和.cpp生成好来。
我的java文件如下:
import java.util.ArrayList;
public class MyNative
{
static
{
System.loadLibrary( "face" );
}
public native static ArrayList<String> findCircles(String imgUrl, int left, int top, int right, int bottom);
public static void main(String[] args){
ArrayList<String> circles = MyNative.findCircles("D:/a.jpg", 1, 10, 30, 50);
System.out.println(circles.size());
for (int i = 0; i < circles.size(); i++){
System.out.println(i +" : " + circles.get(i).toString());
}
}
}
生成的.h文件如下:
然后准备一个C++工程
c_MyNative.h就是生成的头文件
findCircles.cpp则是对它的实现
我们来观察一下命令行下生成dll的方式
cl -I c:/"Program Files"/Java/jdk1.6.0_10/include -I c:/"Program Files"/Java/jdk1.6.0_10/include/win32 -LD findCircles.cpp -FefindCircle.dll
里边加入了两个目录,分别是jdk里边的include以及它的子目录win32。
所以我便依葫芦画瓢,也在工程的包含目录里边把这两个目录加进去,如下图蓝框:
opencv等的包含目录也已经加在里边了。