初步了解JNI------java程序调用c/c++程序

来源:互联网 发布:中国联通云数据公司 编辑:程序博客网 时间:2024/06/09 23:14

开发环境: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上那些大神之生猛阿,再次提醒我,也提醒大家:尊重原创,尊重每一个人的劳动成果!

 

文章纰漏很多,望大家谅解,多提宝贵意见!

 

原创粉丝点击