Windows下使用Java Jni调用C/C++初探
2016-10-25 19:07
645 查看
一、Java本地方法原理
详解《Java核心技术 卷II 高级特性》第十二章 本地方法原理可以用书中的这幅图来描述:
二、 使用工具
Visual Studio 2010,Eclipse三、Demo开发步骤
1. 在Eclipse中创建HelloNativeTest java工程
新建HelloNativeTest类,类代码如下:public class HelloNativeTest { static { System.loadLibrary("HelloJni"); } public native void greeting(); public static void main(String[] args) { new HelloNativeTest().greeting(); } }
然后使用javac命令编译该文件(在cmd模式中,切换到改java文件所在目录,输入javac HelloNativeTest.java),此时便会在同目录下生成.class文件。如下图所示:
2. 使用javah命令生成.h文件
在命令行中,输入javah HelloNativeTest命令,便会在同目录下生成HelloNativeTest.h头文件。头文件内容如下:/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class HelloNativeTest */ #ifndef _Included_HelloNativeTest #define _Included_HelloNativeTest #ifdef __cplusplus extern "C" { #endif /* * Class: HelloNativeTest * Method: greeting * Signature: ()V */ JNIEXPORT void JNICALL Java_HelloNativeTest_greeting (JNIEnv *, jobject); #ifdef __cplusplus } #endif #endif
此时HelloNativeTest\src目录下有三个文件,如下图所示:
3. 打开Visual Studio创建dll工程
创建名称为HelloJni的dll工程,步骤如下图:点击ok,接着再点击next,弹出下面的界面,注意选择dll工程和空项目选项。如下图所示:
在上一步生成的HelloNativeTest.h文件拷贝到dll工程目录下,同时把该文件add进vs工程中。在工程中创建HelloNativeTest.cpp文件。cpp文件内容如下:
/* @version 1.10 2016-10-25 @author pxhero */ #include "HelloNativeTest.h" #include <stdio.h> JNIEXPORT void JNICALL Java_HelloNativeTest_greeting( JNIEnv *env, jobject obj) { printf("Hello Native World!\n"); }
在build整个工程之前,需要设置工程的include目录,如下图所示:
其中C:\Program Files\Java\jdk1.8.0_51\include是你的jdk安装目录。
此时可以build整个工程,生成dll。特别注意,如果你的windows系统是64位的,则必须生成64位的dll,才能被jni调用。64位dll生成的方法是更改你的dll项目的Configure Manager配置,如下图所示,更改成x64
点击ok,此时可以Build整个工程了。**由于我的电脑是64的,所以我就按64的来描述了。32位的电脑原理类似。**Build完之后,会在E:\JniDemo\HelloJni\x64\Debug目录下生成HelloJni.dll文件。
4. 在Eclipse中编译运行HelloNativeTest
需要设置java.library.path,步骤是打开工程的属性界面,如下图所示:双击Native library location,
在location中输入E:\JniDemo\HelloJni\x64\Debug(上一步生成的dll路径)
点击ok,再点击Apply。此时即可在Eclipse中运行HelloNativeTest,在Console中会有以下输出:
ok,done!
相关文章推荐
- windows7下,Java中利用JNI调用c++生成的动态库的使用步骤
- windows7下,Java中利用JNI调用c++生成的动态库的使用步骤
- Java使用JNI调用C/C++(windows和android平台)
- java中如何使用JNI调用C++写的函数
- [JNI] Eclipse直接完成JAVA调用C/C++ (Eclipse上使用CDT结合MinGW)
- 使用JNI,在java端调用c/c++
- java调用C++代码-JNI的使用
- java使用JNI调用C++代码(vs2010生成dll文件)
- linux下 使用JNI 来以C++调用JAVA的类!(一)
- Android JNI 使用的数据结构JNINativeMethod详解 ||建立Android SDK下的JNI、JAVA应用完整步骤---Android JAVA调用C++代码
- [JNI] Eclipse直接完成JAVA调用C/C++ (Eclipse上使用CDT结合MinGW)
- 使用JNI进行混合编程:在C/C++中调用Java代码
- windows下java JNI编程技巧——JAVA调用c/c++(1)
- windows下java JNI编程技巧——JAVA调用c/c++(0)
- Android中简单的JNI使用,C++调用JAVA
- windows下java JNI编程技巧——JAVA调用c/c++(4)
- 使用JNI进行Java与C/C++语言混合编程(2)--在C/C++中调用Java代码
- 关于C++调用jar包,在创建虚拟机时使用JNI_CreateJavaVM调用失败返回-1的问题
- java 使用jni调用本地c++类库
- JAVA使用JNI调用C/C++动态库