Java利用JNI调用c++代码简易例子演示
2014-06-17 00:31
676 查看
点击打开链接
(提取码:8676)
一、首先简单交代一下两个问题:
1.什么是JNI - - - JNI的全名为Java Native Interface(Java本地接口)
2.JNI用来干什么 - - - java代码利用JNI可以调用其他语言编写的代码
二、我们以下面的小例子来演示怎么利用JNI来调用c++代码:
c++代码:输出一句“Hello World”
java代码调用C++代码将" Hello World " 输出到控制台。
三、操作步骤如下
1.在java类中声明Native函数
2.利用javah命令编译生成有关Native方法的头文件
2.1 跳转到工程文件的bin目录下
2.2 利用javah命令编译生成头文件
2.3 操作结果如右图
3.利用VS创建一个C++的动态链接库工程,生成dll文件
3.1创建动态链接库工程
3.2 将编译生成的有关Native方法的头文件放到C++动态连接库工程下
3.3 将头文件导入C++工程的头文件夹
3.3.1 打开头文件存在错误(如下图)发现头文件里还包含其他头文件"jni.h"
- -位于目录Java\jdk1.6.0_10\include
解决办法:将位于目录Java\jdk1.6.0_10\include 的jni.h文件添加到C++工程的头文件夹。(添加过程不再描述)
注意:同时要将上图中出错的#include<jni.h>改为#include"jni.h",因为jni.h在jdk中是系统自带的,而现 在我们将其添加到c++工程则相当于我们自己写了一头文件放到C++工程里,自己定义的用“”。
3.3.2 添加完jni.h文件后发现还是有错,应为jni.h头文件里含包含头文件jni_md.h
- -位于目录Java\jdk1.6.0_10\include\win32
解决办法:将位于目录Java\jdk1.6.0_10\include\win32的jni_md.h文件添加到C++工程的头文件夹。(添加过程不再描述)
3.4创建.cpp文件并在源文件里实现Native方法的代码编写
调试生成dll文件
4.将dll文件的路径添加到系统环境变量path下,这样在任意目录下都可以找到dll文件
5.在java类中加载dll文件
6.调用dll文件的代码
7.运行出现以下问题
解决方法:
Cjjdll动态链接库实在eclipse启动之后导入的,重启eclipse之后会识别到Cjjdll文件。
8.运行结果
(提取码:8676)
一、首先简单交代一下两个问题:
1.什么是JNI - - - JNI的全名为Java Native Interface(Java本地接口)
2.JNI用来干什么 - - - java代码利用JNI可以调用其他语言编写的代码
二、我们以下面的小例子来演示怎么利用JNI来调用c++代码:
c++代码:输出一句“Hello World”
java代码调用C++代码将" Hello World " 输出到控制台。
三、操作步骤如下
1.在java类中声明Native函数
package com.wade; public class TestJni { //在java类中声明Native函数 public native void sayHello(); public static void main(String[] args) { } }
2.利用javah命令编译生成有关Native方法的头文件
2.1 跳转到工程文件的bin目录下
2.2 利用javah命令编译生成头文件
2.3 操作结果如右图
3.利用VS创建一个C++的动态链接库工程,生成dll文件
3.1创建动态链接库工程
3.2 将编译生成的有关Native方法的头文件放到C++动态连接库工程下
3.3 将头文件导入C++工程的头文件夹
3.3.1 打开头文件存在错误(如下图)发现头文件里还包含其他头文件"jni.h"
- -位于目录Java\jdk1.6.0_10\include
解决办法:将位于目录Java\jdk1.6.0_10\include 的jni.h文件添加到C++工程的头文件夹。(添加过程不再描述)
注意:同时要将上图中出错的#include<jni.h>改为#include"jni.h",因为jni.h在jdk中是系统自带的,而现 在我们将其添加到c++工程则相当于我们自己写了一头文件放到C++工程里,自己定义的用“”。
3.3.2 添加完jni.h文件后发现还是有错,应为jni.h头文件里含包含头文件jni_md.h
- -位于目录Java\jdk1.6.0_10\include\win32
解决办法:将位于目录Java\jdk1.6.0_10\include\win32的jni_md.h文件添加到C++工程的头文件夹。(添加过程不再描述)
3.4创建.cpp文件并在源文件里实现Native方法的代码编写
#include"com_wade_TestJni.h" #include <iostream> using namespace std; JNIEXPORT void JNICALL Java_com_wade_TestJni_sayHello(JNIEnv *env, jobject obj) { cout<<"Hello world"<<endl; }
调试生成dll文件
4.将dll文件的路径添加到系统环境变量path下,这样在任意目录下都可以找到dll文件
5.在java类中加载dll文件
6.调用dll文件的代码
package com.wade; public class TestJni { //在java类中声明Native函数 public native void sayHello(); public static void main(String[] args) { //在java类中加载dll文件 System.loadLibrary("Cjjdll"); //创建对象,并调用方法 new TestJni().sayHello(); } }
7.运行出现以下问题
解决方法:
Cjjdll动态链接库实在eclipse启动之后导入的,重启eclipse之后会识别到Cjjdll文件。
8.运行结果
相关文章推荐
- C++ 调用 Java Cocos2d-x利用jni调用java层代码
- cocos2d-x利用jni调用java层代码(c++调java)
- window下利用JNI在java代码中调用c/c++接口
- Ubuntu下,Java中利用JNI调用codeblocks c++生成的动态库的使用步骤
- JNI 调用C++代码 并在C++代码中调用Java传递进来的接口
- JNI技术实践(1) Java调用C/C++代码
- Android-NDK开发之基础--Android JNI实例代码(一)-- 在JNI中执行Java方法--C/C++调用Java
- Android 学习笔记——利用JNI技术在Android中调用、调试C++代码
- Ubuntu下,Java中利用JNI调用codeblocks c++生成的动态库的使用步骤
- eclipse JNI示例。利用C/C++实现JAVA中调用的函数
- Android 学习笔记——利用JNI技术在Android中调用、调试C++代码
- Cocos2d-x中通过JNI进行C++调用Java代码
- Android-NDK开发之基础--Android JNI实例代码(一)-- 在JNI中执行Java方法--C/C++调用Java
- 使用JNI进行Java与C/C++语言混合编程(2)--在C/C++中调用Java代码
- windows7下,Java中利用JNI调用c++生成的动态库的使用步骤
- Android JNI 使用的数据结构JNINativeMethod详解 ||建立Android SDK下的JNI、JAVA应用完整步骤---Android JAVA调用C++代码
- java使用JNI调用C++代码(vs2010生成dll文件)
- 使用JNI进行混合编程:在C/C++中调用Java代码
- JNI技术实践(1) Java调用C/C++代码
- 用JNI进行Java编程---从C/C++程序调用Java代码