http://blog.chinaunix.net/uid-27003388-id-3235189.html

1.       在Eclipse里创建一个Java project(jni_test);

在src里创建一个package,取名为jni;

然后在jni里创建一个带有native声明的方法的java类(helloworld.java),文件具体内容如下:

package jni;

 

public class helloworld {

static{

System.loadLibrary("helloworld");

}

public native void dispHelloWorld();

/**

@param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

//System.getProperty("java.library.path");

new helloworld().dispHelloWorld();

}

}

Eclipse工程树形图如下:

2.生成JNI头文件

在命令行里,cd到Java工程(jni_test)的src目录,例如:

cd E:\workspace\jni_test\src

然后执行javah -jni jni.helloworld(package不要漏掉)

生成的jni_helloworld.h文件如下

/* DO NOT EDIT THIS FILE - it is machine generated */

#include <jni.h>

/* Header for class jni_helloworld */

#ifndef _Included_jni_helloworld

#define _Included_jni_helloworld

#ifdef __cplusplus

extern "C" {

#endif

/*

* Class:     jni_helloworld

* Method:    dispHelloWorld

* Signature: ()V

*/

JNIEXPORT void JNICALL Java_jni_helloworld_dispHelloWorld

(JNIEnv *, jobject);

#ifdef __cplusplus

}

#endif

#endif

Eclipse工程树形图更新如下:

3.       在Java工程(jni_test)的src目录创建jni_helloworldImp.cpp,实现jni_HelloWorld.h中的函数,这里请注意函数名,cpp里的函数名跟h文件的函数名要一致。

jni_helloworldImp.cpp内容如下:

#include <jni.h>

#include "jni_helloworld.h"

#include <stdio.h>

JNIEXPORT void JNICALL Java_jni_helloworld_dispHelloWorld

(JNIEnv *env, jobject obj)

{

printf("Hello world ! ");

return;

}

Eclipse工程树形图更新如下:

4.       在Java工程(jni_test)的src目录编译jni_HelloWorldImp.cpp产生dll,

在控制台下>cl -LD jni_HelloWorldImp.cpp -Fehelloworld.dll,
以上命令的参数中,-LD表示产生dll,-Fe后面表示产生dll的名字,具体的参数可以自己用cl -help命令查看, 
如果成功编译,会产生helloworld.dll, helloworld.lib, helloworld.exp,

以及jni_HelloWorldImp.obj四个文件。

Eclipse工程树形图更新如下:

这个过程中可能会遇到如下问题:

<1>. CL不是内部命令,解决方法:

在系统环境变量的path里加上VC-BIN路径,

C:\Program Files\Microsoft Visual Studio\VC98\Bin

C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin

<2>. fatal error C1083: Cannot open include file: 'jni.h': No such file or directory

解决方法:

拷贝%java_home%\include\jni.h

%java_home%\include\win32\jawt_md.h

%java_home%\include\win32\jni_md.h

到VC-INCLUDE目录(C:\Program Files\Microsoft Visual Studio\VC98\Include),

注:java_home指的是你的JDK目录。

将VC-INCLUDE目录添加到系统环境变量,新增一个INCLUDE变量,

变量值为:C:\Program Files\Microsoft Visual Studio\VC98\Include

<3>. LINK : fatal error LNK1104: cannot open file "LIBCMT.lib"

解决方法:

将VC-LIB目录添加到系统环境变量,新增一个LIB变量,

变量值为:C:\Program Files\Microsoft Visual Studio\VC98\Lib

5.       设置jni_test工程的lib路径,也就是将helloworld.dll的路径添加到工程的lib路径;

具体方法是:

右击项目名à选择属性propertiesà在左边列表内选择“Java Build Path”à在右边选项卡用选择“source”à点开项目名前的“+”号,选择“Native library location”,“Edit”选择路径。(当然如果将dll拷贝到workspace下也可以用相对路径。也可右击“src”设定其properties内Native Library项。)

6.       运行jni_test工程,run as java application,Console输出Hello world !

如图:

eclipse调用jni的更多相关文章

  1. 手把手教你通过Eclipse工程配置调用JNI完全攻略

    本文地址:http://www.cnblogs.com/wavky/p/JNI.html 当你找到并鬼使神差地打开这个博文的时候,我敢肯定你已经知道什么是JNI,基本概念就不粘贴了. 百度出来的JNI ...

  2. 关于 调用 JNI JAR 的说明和注意事项,调用第三方 JAR SDK 和 翻译 安卓 JAVA 代码 的说明 V2015.6.10

    关于 调用 JNI JAR 的说明和注意事项,调用第三方 JAR SDK 和 翻译 安卓 JAVA 代码 的说明 V2015.6.10 转载请标明出处,否则死全家.选择[复制链接]即可得到出处. (* ...

  3. Eclipse调用hadoop2运行MR程序(转)

    hadoop:hadoop2.2 ,windows myeclipse环境: Eclipse调用hadoop运行MR程序其实就是普通的java程序可以提交MR任务到集群执行而已.在Hadoop1中,只 ...

  4. 浅谈Eclipse调用Tomcat服务的原理

    浅谈Eclipse调用Tomcat服务的原理 转:http://www.thinksaas.cn/group/topic/341645/ 转:http://www.173it.cn/Html/?581 ...

  5. 【我的Android进阶之旅】Android调用JNI出错 java.lang.UnsatisfiedLinkError: No implementation found for的解决方法

    错误描述 今天使用第三方的so库时候,调用JNI方法时出现了错误.报错如下所示: 11-01 16:39:20.979 4669-4669/com.netease.xtc.cloudmusic E/a ...

  6. Android调用JNI本地方法跟踪目标代码

    正如Android调用JNI本地方法经过有点改变章所说跟踪代码是可行的,但是跟踪某些代码会出现anr,点击取消,还是不好运,有提高办法吗?回答是有(gdb还没试过,本文只讨论ida). 下面是我使用  ...

  7. Android调用JNI本地方法经过有点改变

    方法注册好后要经过哪些路 Android一个异常捕获项目 https://github.com/xroche/coffeecatch coffeecatch CoffeeCatch, a tiny n ...

  8. java调用jni oci接口宕机原因排查

    调用最简单的JNI没有出错,但是涉及到OCI时就会异常退出,分析后基本确定是OCI 11g中的signal所致,参考ora-24550 signo=6 signo=11解决. 但是这个相同的so库直接 ...

  9. eclipse调用MySQL数据库的方法

    今天来总结一下使用如何使用eclipse调用MySQL数据库的数据. 一.设置eclipse 我们首先来设置一下eclipse. 在下部的Servers中右键选择new,选择server 之后在新弹出 ...

随机推荐

  1. SAP BI vs. Oracle BI

    对比Oracle BI产品和SAP BI 产品,做一些简单的产品功能比较,经供参考. 这里把SAP和Oracle同类的产品放在一行,用于比较. SAP BI 特点 Oracle BI 特点 BW 和S ...

  2. 08Vue.js快速入门-Vue综合实战项目

    8.1. 前置知识学习 npm 学习 官方文档 推荐资料 npm入门 npm介绍 需要了解的知识点 package.json 文件相关配置选项 npm 本地安装.全局安装.本地开发安装等区别及相关命令 ...

  3. 检查jdk版本

    ### 检查JDK版本信息-----------------------------查看jdk是否已安装 javac查看jdk版本信息 javac -version查看jdk安装位置 java -ve ...

  4. 一个JS引发的血案

    转载一篇大师傅的文章: 原文链接:http://xn--i2r.ml/index.php/2017/08/05/39.html 又到了周末,闲来无聊,挖挖补天 找了个目标,发现一个站 查看源码发现一个 ...

  5. 【转】Java计算文件的hash值

    原文地址:http://blog.csdn.net/qq_25646191/article/details/78863110 如何知道一个文件是否改变了呢?当然是用比较文件hash值的方法,文件has ...

  6. [转]ORA-01555错误总结(一)

    原文地址:http://blog.csdn.net/sh231708/article/details/52935695 这篇文章算是undo相关问题总结的补充,因为ORA-01555错误与undo有着 ...

  7. [转]详解Oracle高级分组函数(ROLLUP, CUBE, GROUPING SETS)

    原文地址:http://blog.csdn.net/u014558001/article/details/42387929 本文主要讲解 ROLLUP, CUBE, GROUPING SETS的主要用 ...

  8. [转]java中通过request获取路径中的不同信息

    原文地址:http://blog.csdn.net/lv_shijun/article/details/40819859 aa为工程中的项目名 bb为webRoot下的文件夹 1.request.ge ...

  9. 【转】ExtJS获取父子、兄弟容器元素方法

    原文地址:http://www.cnblogs.com/linxiong945/p/3961732.html 1.当前对象的父对象(上级对象) this.ownerCt: 2.当前对象的下一个相邻的对 ...

  10. maprduce 中reduce数量

    @Override public int getPartition(Text key, FlowBean value, int numPartitions) { String prefix = key ...