JNI是Java平台中的一个重要的功能,这里我把我做的Demo总结一下,分享一下,我会把每个步骤尽量的详细的展现出来。
这里我就不讲解JNI的原理了,google,百度一下,到处都是
好了,直接来讲步骤吧,文章最后给出了C++和Java的Demo
第一步:安装Java jdk,eclipse。
第二步,配置Java环境变量,java环境变量配置
第三步,新建一个Java应用程序,名为:TestNativeCode,包名:com.liyong.TestNativeCode,类名:TestNativeCode
第四步,在TestNativeCode类里面添加如下代码:
package com.liyong.TestNativeCode;

public class TestNativeCode {
public native void sayHello();
public static void main(String[] args) {
System.loadLibrary("NativeCode");
TestNativeCode nativeCode=new TestNativeCode();
nativeCode.sayHello();
}
}

第五步,编译Java文件
1,运行-->cmd-->进入TestNativeCode项目的src目录下编译该Java类,命令 javac ./com/liyong/TestNativeCode/TestNativeCode.java。在该TestNativeCode.java目录下会生成TestNativeCode.class文件
2,使用javah生成头文件,命令 javah -jni com.liyong.TestNativeCode.TestNativeCode。在src目录下生成com_liyong_TestNativeCode_TestNativeCode.h文件。

第六步,编译C++类库
1,打开VS2008,新建Win32 项目NativeCode,如图所示:

确定后,在“应用程序类型”中选择“DLL”,如图:

2,将上一步生成的com_liyong_TestNativeCode_TestNativeCode.h添加到项目头文件中。

3,在NativeCode项目的“源文件”中添加NativeCode.cpp文件,具体如蓉如下

#include "stdafx.h"
#include "com_liyong_TestNativeCode_TestNativeCode.h"
#include <iostream>
using namespace std; JNIEXPORT void JNICALL Java_com_liyong_TestNativeCode_TestNativeCode_sayHello(JNIEnv * env, jobject obj)
{
cout<<"Hello NDK!"<<endl;
//printf("Hello NDK!");
}

4,使用Release编译,生成NativeCode.dll,将其拷贝到java环境变量Java_Home的Bin目录下,比如,LZ的Java_Home目录是
C:\Program Files\Java\jdk1.6.0_25,将NativeCode.dll拷贝到C:\Program Files\Java\jdk1.6.0_25\bin目录下。

第七步,运行Java应用程序,会输出“Hello NDK!”,Ok,成功!这里只是一个简单的例子,具体的应用就靠大家举一反三啦

这里给出Demo的源码:C++:NativeCode.rar Java:TestNativeCode.rar

转自:http://www.cnblogs.com/cpcpc/archive/2012/08/13/2636199.html

Java调用C++类库--JNI的更多相关文章

  1. java 调用 C# 类库 实战视频, 非常简单, 通过 云寻觅 javacallcsharp 生成器 一步即可!

    java 调用 C# 类库 实战视频, 非常简单, 通过 云寻觅 javacallcsharp 生成器 一步即可! 通过 云寻觅 javacallcsharp 生成器 自动生成java jni类库,  ...

  2. java 调用 C# 类库搞定,三步即可,可以调用任何类及方法,很简单,非常爽啊

    java 调用 C# 类库搞定,三步即可,可以调用任何类及方法,很简单,非常爽啊 java 调用 C# 类库搞定,可以调用任何类及方法,很简单,非常爽啊 总体分三步走: 一.准备一个 C# 类库 (d ...

  3. windows和linux环境下java调用C++代码-JNI技术

    最近部门做安卓移动开发的需要调C++的代码,困难重重,最后任务交给了我,查找相关资料,没有一个教程能把不同环境(windows,linux)下怎么调用说明白的,自己在实现的过程中踩了几个坑,在这里总结 ...

  4. Linux平台Java调用so库-JNI使用例子

    1.确保gcc编译器已安装 2.编写HelloJNI.java代码,用native声明需要用C实现的函数.如果源程序是包含在package里的话,应该建立同样的文件夹结构,比如/home/swan/t ...

  5. Java调用C++动态链接库——Jni

    最近项目需要,将C++的算法工程编译成动态链接库,交给 Java后台当作函数库调用.就去了解了下Jni.使用起来还是比较方便的. 1.  首先编写Java的调用类.例如:    public clas ...

  6. Android使用JNI(从java调用本地函数)

    当编写一个混合有本地C代码和Java的应用程序时,需要使用Java本地接口(JNI)作为连接桥梁.JNI作为一个软件层和API,允许使用本地代码调用Java对象的方法,同时也允许在Java方法中调用本 ...

  7. Android JNI之JAVA调用C/C++层

    转载请声明:原文转自:http://www.cnblogs.com/xiezie/p/5929996.html 一.java调用本地函数的开发步骤: 1.编写本地方法的类(可以说是用来叙述本地方法的类 ...

  8. linux下java调用.so文件的方法1: JNI

    摘自http://blog.163.com/squall_smile/blog/static/6034984020129296931793/ https://my.oschina.net/simabe ...

  9. [JNI] Java 调用 C++ dll

    首先介绍一下JNI吧! JNI 是Java提供的一个用于调用本地接口的接口层,位于Java代码 和 本地代码之间的一层:主要功能是 数据类型的转换,还有就是通过这一层来调用本地代码! 下面就说说Jav ...

随机推荐

  1. 认识StringBuffer类

    概述: StringBuffer类是线程安全的可变字符序列 线程安全效率低 StringBuffer和String的区别 * String是一个不可变的字符序列 * StringBuffer是一个可变 ...

  2. 【京东账户】——Mysql/PHP/Ajax爬坑之产品列表显示

    一.引言 实现京东的账户项目,功能模块之一,产品列表显示.要用到的是Apach环境,Mysql.PHP以及Ajax. 二.依据功能创建库.表.记录 创建库:jd 创建表:产品表 添加多条记录 /**产 ...

  3. 【京东详情页】——原生js爬坑之标签页

    一.引言 要做详情页的商品评价等5个li的标签页转换,效果如下: 二.实现原理 有一个特别的地方:上面五个li,但下面只有四个容器(table/div). 设计的目的:无论点哪个li,只有前四个div ...

  4. java集合系列——Set之HashSet和TreeSet介绍(十)

    一.Set的简介 Set是一个不包含重复元素的 collection.更确切地讲,set 不包含满足 e1.equals(e2) 的元素.对 e1 和 e2,并且最多包含一个为 null 的元素. S ...

  5. vector 利用swap 函数进行内存的释放 vector<int>().swap

    首先,vector与deque不同,其内存占用空间只会增长,不会减小.比如你首先分配了10,000个字节,然后erase掉后面9,999个,则虽然有效元素只有一个,但是内存占用仍为10,000个.所有 ...

  6. LDA工程实践之算法篇之(一)算法实现正确性验证(转)

    研究生二年级实习(2010年5月)开始,一直跟着王益(yiwang)和靳志辉(rickjin)学习LDA,包括对算法的理解.并行化和应用等等.毕业后进入了腾讯公司,也一直在从事相关工作,后边还在yiw ...

  7. An Introduction to Variational Methods (5.2)

    我们现在已经得到了关于潜在变量Z的优化分布的表达形式: ‍ 其中: ‍ 所以现在我们可以得到Z的期望: ‍ 另外对于Z还值得一提的是,我们从其优化分布的表达式中可以看出,各个Z的组成部分之间还是相互耦 ...

  8. R语言基础语法

    学习一门新的语言,率先学习输出hello world.我们就从这里开始学习. 首先打开RStudio这个IDE,然后在左边输入: > mystr <- "hello world& ...

  9. javascript中的DOM介绍(一)

    一.基础知识点 1.DOM是文档对象模型,是针对HTML和XML文档的一个API(应用程序接口) 2.DOM描绘了一个层次化的节点数,允许开发人员进行添加,移除个修改等操作 3.IE浏览器中所有的DO ...

  10. ubuntu访问文件服务器

    随便打开一个文件夹,按ctrl+L 输入 smb://172.29.17.1 然后输入用户名和密码即可