开发环境:JDK+VC6.0
步骤:
1.编写java源文件HelloWorld.java
如:
class HelloWorld
{
public native void displayHelloWorld();
static
{
System.loadLibrary("Hello");
}
public static void main(String[] args)
{
new HelloWorld().displayHelloWorld();
}
}
2.将其编译成HelloWorld.class(命令:javac HelloWorld.java)
3.将其编译成HelloWorld.h(命令:javah HelloWorld)
用编辑文本打开内容为:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */
#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloWorld
* Method: displayHelloWorld
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
注意:此文件自动生成,无需修改
4.编写C/C++程序(小弟也是入门级),以我们熟悉的HelloWorld为例
#include <jni.h>
#include "HelloWorld.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj)
{
printf("Hello world!\n");
return;
}
5.将我们编写的C/C++程序编译成.dll文件(动态链接库)
具体步骤如下:
(1).打开VC6.0,新建一个Win32 Dynamic-Link library工程,选择An empty DLL project空工程
注意:工程名称一定要为Hello,因为我们在java源文件HelloWorld.java中的这一句System.loadLibrary("Hello")就是调用这个链接库,两边名称一定要一致
(2)新建一个C++ Source File------>HelloWorldImp.c(仅代表我的第一个小程序),此文件名称任意
(3)将java/jdk中的2个.h文件(jni.h和jni_md.h,分别位于jdk/include和jdk/include/win32中)复制到Microsoft Visual Studio\VC98\Include(此路径根据你的VC6.0安装路径而定)
(4)将之前编译生成的HelloWorld.h文件复制到这个C/C++工程的根目录下
(5)运行这个工程,编译成功后将在此工程根目录下的Debug文件夹中生成Hello.dll文件
6.将获得的Hello.dll文件复制到HelloWorld.class所在目录,然后在控制台运行java HelloWorld命令,如果之前的步骤都没问题,将在控制台显示Hello world!
就此,我们的第一个JNI小程序终于大功告成了!
写得很繁琐,就是希望大家能够看懂,关于当中一些配置环境变量的问题没有涉及,以免大家出错。
总结:1.其实步骤看起来很多,归根结底最后只需要2个文件,一个是HelloWorld.class,一个是Hello.dll
2.在Windows操作系统下我们的目标文件是.dll文件,而在linux操作系统下就是.so文件
3.网上很多关于JNI的文章很多,方法很多,用到的工具也很多,导致大家看起来有点晕,特别是在不同的操作系统下获得动态链接库(.dll或.so文件)以及用各种的工具得到他们
4.此文章介绍的是Java调用C/C++,网上还有C/C++调用Java,我也是才入门,很多东西都不懂,欢迎大家互相学习互相交流!
(绿色环保,养眼,为了各位程序员的眼睛好,多多提倡,嘎嘎!)
第一次原创博客,确实不易,感慨CSDN上那些大神之生猛阿,再次提醒我,也提醒大家:尊重原创,尊重每一个人的劳动成果!
文章纰漏很多,望大家谅解,多提宝贵意见!