Java学习之通过JNI调用C/C++编写的dll链接库(图文教程)
2015-10-14 14:35
696 查看
看了网上几个主要的教程,都会导致出现各种错误,对于初学者来说会造成一些困扰。在这里详细记录一下JNI调用过程。本案例的基本配置:Eclipse+VS2015,Win10 64位
(1)编写Java Project
打开Eclipse,新建一个Java Project,如:LearnJNI。新建包名,如:com.cogito。新建一个类TestNative。
编写代码,如下:
打开cmd命令提示符,切换到Java Project的bin目录:(projectpath为LearnJNI的目录)
cd
projectpath\bin
输入:javah com.cogito.TestNative,回车,可在LearnJNI的bin目录下发现增加了一个H文件com_cogito_TestNative.h。
(3)创建本地方法的C/C++的dll实现
打开VS2015,新建一个Win32控制台应用程序如NativeProject,Win32应用程序向导中依次如图设置:
将刚刚得到的bin目录下的com_cogito_TestNative.h头文件,以及jni.h、jni_md.h共三个头文件,复制到VS2015创建的工程目录../NativeProject/NativeProject/下。
jni.h文件在jdk安装路径下的include文件夹,如:D:\Program Files\Java\jdk1.7.0_79\include
jni_md.h文件在jdk安装路径下的include/win32文件夹,如:D:\Program
Files\Java\jdk1.7.0_79\include\win32
使得三个.h文件如图:
右键VS2015中建立的工程NativeProject,添加->现有项,选择com_cogito_TestNative.h文件。导入头文件后,双击打开,更改#include <jni.h>为#include
"jni.h",保存(Ctrl+S)。如图:
然后新建一个cpp文件,即右键NativeProject,添加->新建项,命名如:source.cpp,添加上述头文件的红色部分函数的实现代码:(注意#include头文件为刚导入的com_cogito_TestNative.h)
F7进行编译,编译成功后将在工程的x64/release/下生成dll文件。
(4)测试Java调用dll
首先设置本地库目录位置,即在Eclipse中右键(1)中的LearnJNI工程->propertise,选择source标签,展开LearnJNI/src,选中Native library location:(None),右侧点击Edit,复制上述NativeProject.dll的路径填入,如图
然后运行(1)中创建的TestNative类,得到结果输出,大功告成。
附上源码连接:利用JNI实现Java调用C++库
(1)编写Java Project
打开Eclipse,新建一个Java Project,如:LearnJNI。新建包名,如:com.cogito。新建一个类TestNative。
编写代码,如下:
package com.cogito; public class TestNative { <span style="color:#ff0000;">public native void sayHello();</span> public static void main(String[] args) { <span style="color:#ff0000;">System.loadLibrary("NativeProject"); //载入dll库 TestNative test = new TestNative(); test.sayHello(); //调用本地方法</span> } }(2)生成本地方法的头文件
打开cmd命令提示符,切换到Java Project的bin目录:(projectpath为LearnJNI的目录)
cd
projectpath\bin
输入:javah com.cogito.TestNative,回车,可在LearnJNI的bin目录下发现增加了一个H文件com_cogito_TestNative.h。
(3)创建本地方法的C/C++的dll实现
打开VS2015,新建一个Win32控制台应用程序如NativeProject,Win32应用程序向导中依次如图设置:
将刚刚得到的bin目录下的com_cogito_TestNative.h头文件,以及jni.h、jni_md.h共三个头文件,复制到VS2015创建的工程目录../NativeProject/NativeProject/下。
jni.h文件在jdk安装路径下的include文件夹,如:D:\Program Files\Java\jdk1.7.0_79\include
jni_md.h文件在jdk安装路径下的include/win32文件夹,如:D:\Program
Files\Java\jdk1.7.0_79\include\win32
使得三个.h文件如图:
右键VS2015中建立的工程NativeProject,添加->现有项,选择com_cogito_TestNative.h文件。导入头文件后,双击打开,更改#include <jni.h>为#include
"jni.h",保存(Ctrl+S)。如图:
/* DO NOT EDIT THIS FILE - it is machine generated */ #include "jni.h" /* Header for class com_cogito_TestNative */ #ifndef _Included_com_cogito_TestNative #define _Included_com_cogito_TestNative #ifdef __cplusplus extern "C" { #endif /* * Class: com_cogito_TestNative * Method: sayHello * Signature: ()V */ <span style="color:#ff0000;">JNIEXPORT void JNICALL Java_com_cogito_TestNative_sayHello (JNIEnv *, jobject);</span> #ifdef __cplusplus } #endif #endif
然后新建一个cpp文件,即右键NativeProject,添加->新建项,命名如:source.cpp,添加上述头文件的红色部分函数的实现代码:(注意#include头文件为刚导入的com_cogito_TestNative.h)
# include "com_cogito_TestNative.h" # include <iostream> using namespace std; JNIEXPORT void JNICALL Java_com_cogito_TestNative_sayHello(JNIEnv *, jobject) { cout << "Hello World!" << endl; }接下来,设置编译版本和平台,根据需要设置,如release版x64平台
F7进行编译,编译成功后将在工程的x64/release/下生成dll文件。
(4)测试Java调用dll
首先设置本地库目录位置,即在Eclipse中右键(1)中的LearnJNI工程->propertise,选择source标签,展开LearnJNI/src,选中Native library location:(None),右侧点击Edit,复制上述NativeProject.dll的路径填入,如图
然后运行(1)中创建的TestNative类,得到结果输出,大功告成。
附上源码连接:利用JNI实现Java调用C++库
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android使用Jni实现压力锅数据检测效果示例
- JAVA中JNI的简单使用分享
- c++ mk文件出错Jni调用产生java.lang.UnsatisfiedLinkError错误解决方法
- 安卓应用开发通过java调用c++ jni的图文使用方法
- Java调用c++库
- Android App 增量更新实例(Smart App Updates)
- 每周总结20130814——Android NDK环境的搭建和使用,YUV420SP格式图像的处理
- Android NDK开发简介
- Android NDK开发之Jni的数据类型
- Android NDK开发之数组类型的操作
- Android NDK开发之Jni调用Java对象
- JNI中参数的传递与操作
- JNI Java 向C传送字符串尝试-附代码
- android JNI 调用
- [android底层]JNI字段描述符
- Android Studio 用 JNI 实现与原生代码通信
- [Android]关于Native函数的debug