网上很多地方都讲了如何通过JNI调用的方式打印HelloWorld,但是有时候我们实际操作起来可能会有些不一样,这里我们采用Eclipse + vs2013来编写。
1.1 项目目录结构
(1) 在Eclipse中新键一个工程JNI_Helloworld,我们有如下目录结构:
反应到文件夹下就是:
-----JNI_Helloworld
|---------------src
| |---------com
| |----------worldcloud
| |-----------------------HelloWorld.java
|-----------------bin
(2) 在JNI_Helloworld目录下新键jni目录,用于新键我们的vs工程
1.2 编写HelloWorld.java代码
1.3 用javah编译生成private native void print()对应的.h头文件
注:JNI_Helloworld是我们工程的根目录,-o jni/com_worthcloud_HelloWorld.h是我们要生成的目标头文件(及其存放路径)
-cp bin 指定我们要加载的类路径(eclipse自动编译生成HelloWorld.class存放于bin目录下),
最后是类的完整路径com.worthcloud.HelloWorld(包括包名 )
另外,我们也可以在eclipse中直接配置调用javah生成相应的头文件,在eclipse "run"->"External Tools"->"External Tools Configurations“界面做如下配置:
1.4 用vs2013新键一个解决方案(起名为jni,存放于上面1.1中我们新建的jni目录中)
1.5 向JNI工程中添加一个新的win32工程,起名为helloworld
选择确定,进入下一步:
如上,勾选"DLL"和“空项目”两个选项
1.6 编写com_worthcloud_HelloWorld.c文件,以实现头文件中的函数
首先将上面我们编译好的com_worthcloud_Helloworld.h头文件复制到我们新建的工程中,如下图所示:
然后编写com_worthcloud_HelloWorld.c的实现:
在对上述这个工程编译之前,我们先进行一些环境的设置:
(1) 调整为x86项目
因为我们Java虚拟机目前采用的是64位的虚拟机,因此要使用的dll也是64位的,因此这里先进行调整.
如上图所示,进入"配置管理器“页面,然后选择x64
(2) 设置需要引用的jni.h头文件的路径
,
请设置成自己的JDK安装路径
(3) 生成helloworld.dll
1.7 运行HelloWorld.java程序
将1.6中生成的helloworld.dll拷贝到上面Eclipse新键的JNI_Helloworld根目录下:
编译运行,打印出HelloWorld