初步了解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上那些大神之生猛阿,再次提醒我,也提醒大家:尊重原创,尊重每一个人的劳动成果!
文章纰漏很多,望大家谅解,多提宝贵意见!
- 初步了解JNI------java程序调用c/c++程序
- java JNI调用c程序
- JNI小程序:Java通过JNI调用C程序
- java通过jni调用C程序
- jni实现C语言调用Java程序
- Java JNI调用c/c++程序
- JNI技术之java程序调用C程序
- android studio 调用jni,实现Java调用C语言程序
- Java的JNI:使用Java调用C程序(入门)
- Java的JNI:使用Java调用C程序(一)
- 【Java】Java调用C/C++程序的实现(jni)
- JAVA中通过JNI调用C程序实例教程
- Java通过JNI调用本地C/C++程序
- Java通过JNI调用本地C/C++程序--常用示例
- Jni 使用总结第二篇:c程序调用java
- java调用c程序
- android使用JNI调用C,C++程序
- 用JNI调用C/C++程序
- 1073 计算某年某月的天数
- Effective C++学习笔记之第四章(4)
- 数学之路(2)-数据分析-R基础(2)
- 五步让你成为专家级程序员
- 坑爹的一个面试题,n多陷阱
- 初步了解JNI------java程序调用c/c++程序
- ubuntu环境MPI使用
- js ajax
- 一次比较麻烦的性能问题诊断及解决
- 如何让willAnimateRotationToInterfaceOrientation对所有可见视图有效?
- Android命令
- eclipse最佳设置
- 30分钟搞定Debian硬盘安装
- 联系人左右滑动功能的实现