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. iOS开发transform的使用

    // //  ViewController.m //  18-transform的使用 #import "ViewController.h" @interface ViewCont ...

  2. ubuntu 解压命令

    ubuntu解压命令.tar解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)———————————————. ...

  3. vue 实现右键功能

    @contextmenu.prevent="rightShow()" v-on:contextmenu.prevent = "事件名称"

  4. 【机器学习】随机森林(Random Forest)

    随机森林是一个最近比较火的算法 它有很多的优点: 在数据集上表现良好 在当前的很多数据集上,相对其他算法有着很大的优势 它能够处理很高维度(feature很多)的数据,并且不用做特征选择 在训练完后, ...

  5. shell脚本输出带颜色字体

    #!/bin/bash # #下面是字体输出颜色及终端格式控制 #字体色范围:30-37 echo -e "\033[30m 黑色字 \033[0m" echo -e " ...

  6. 基于jQuery悬停图片变色放大特效

    分享一款基于jQuery悬停图片变色放大特效是一款响应式鼠标悬停图片放大效果代码.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div style="width ...

  7. WebApi增删改查Demo

    1.新建webapi项目 2.配置WebApiConfig public const string DEFAULT_ROUTE_NAME = "MyDefaultRoute"; p ...

  8. MyBatis拦截器的执行顺序引发的MyBatis源码分析

    你猜一下哪个先执行?反正不要按常规来. <plugins> <plugin interceptor="com.Interceptor1"></plug ...

  9. IIS连接数修改

    1, 对于xp等非服务器操作系统,IIS的并发数量是有限的.在xp上同时允许的连接数是10. 当程序出现性能问题时,可以通过下面的方法来查看并发连接数 这个工具在计算机管理里面可以找到 在图表区域,右 ...

  10. sql逻辑查询 理论知识

    参考并转载http://www.cnblogs.com/bhtfg538/archive/2008/11/25/1341016.html First: (8) SELECT (9) DISTINCT  ...