eclipse调用jni
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的更多相关文章
- 手把手教你通过Eclipse工程配置调用JNI完全攻略
本文地址:http://www.cnblogs.com/wavky/p/JNI.html 当你找到并鬼使神差地打开这个博文的时候,我敢肯定你已经知道什么是JNI,基本概念就不粘贴了. 百度出来的JNI ...
- 关于 调用 JNI JAR 的说明和注意事项,调用第三方 JAR SDK 和 翻译 安卓 JAVA 代码 的说明 V2015.6.10
关于 调用 JNI JAR 的说明和注意事项,调用第三方 JAR SDK 和 翻译 安卓 JAVA 代码 的说明 V2015.6.10 转载请标明出处,否则死全家.选择[复制链接]即可得到出处. (* ...
- Eclipse调用hadoop2运行MR程序(转)
hadoop:hadoop2.2 ,windows myeclipse环境: Eclipse调用hadoop运行MR程序其实就是普通的java程序可以提交MR任务到集群执行而已.在Hadoop1中,只 ...
- 浅谈Eclipse调用Tomcat服务的原理
浅谈Eclipse调用Tomcat服务的原理 转:http://www.thinksaas.cn/group/topic/341645/ 转:http://www.173it.cn/Html/?581 ...
- 【我的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 ...
- Android调用JNI本地方法跟踪目标代码
正如Android调用JNI本地方法经过有点改变章所说跟踪代码是可行的,但是跟踪某些代码会出现anr,点击取消,还是不好运,有提高办法吗?回答是有(gdb还没试过,本文只讨论ida). 下面是我使用 ...
- Android调用JNI本地方法经过有点改变
方法注册好后要经过哪些路 Android一个异常捕获项目 https://github.com/xroche/coffeecatch coffeecatch CoffeeCatch, a tiny n ...
- java调用jni oci接口宕机原因排查
调用最简单的JNI没有出错,但是涉及到OCI时就会异常退出,分析后基本确定是OCI 11g中的signal所致,参考ora-24550 signo=6 signo=11解决. 但是这个相同的so库直接 ...
- eclipse调用MySQL数据库的方法
今天来总结一下使用如何使用eclipse调用MySQL数据库的数据. 一.设置eclipse 我们首先来设置一下eclipse. 在下部的Servers中右键选择new,选择server 之后在新弹出 ...
随机推荐
- 每日英语:How the College Bubble Will Pop
The American political class has long held that higher education is vital to individual and national ...
- _ENV和_G
5.1之前, 全局变量存储在_G这个table中, 这样的操作:a = 1 相当于:_G['a'] = 1 但在5.2之后, 引入了_ENV叫做环境,与_G全局变量表产生了一些混淆,需要从原理上做一个 ...
- [iOS]终极横竖屏切换解决方案
[iOS]终极横竖屏切换解决方案 大家的项目都是只支持竖屏的吧?大多数朋友(这其中当然也包括博主),都没有做过横屏开发,这次项目刚好有这个需求,因此把横竖屏相关的心得写成一遍文章供诸位参考. 01.综 ...
- (原)docker的一个“Driver aufs failed to remove...”问题的解决
1. /var/lib/docker/aufs/mnt下的目录不能乱删! /var/lib/docker/aufs/diff下的目录删了就死了!!!!!2. 尽量不要用docker tag -f 这 ...
- 【驱动】Flash设备驱动基础·NOR·NAND
Flash存储器 ——>Flash存储器是近几年来发展最快的存储设备,通常也称作闪存.Flash属于EEPROM(电可擦除可编程只读存储器),是一类存取速度很高的存储器. ——>它既有RO ...
- JVM垃圾回收--年轻代、年老点和持久代
关键字约定 Young generation –>新生代 Tenured / Old Generation –>老年代 Perm Area –>永久代 年轻代: 所有新生成的对象首先 ...
- opencv项目报错_pFirstBlock==pHead解决办法
备注: 我上次遇到这个问题的原因是项目设置为MTd导致的 OpenCV是MTd的,我要是改成MDd就编译报错,所以不能采用把项目改为MDd的办法,只能把OpenCV重新编译为MDd的,下载CMAKE, ...
- C#学习笔记(6)——大项目增删改查
说明(2017-5-28 11:35:39): 1. 需要注意的地方很多 2. 首先是连接字符串str要直接写在类里面,不然每个按钮里面都要写一遍. 3. 查询用到sqlDataReader等三个方法 ...
- 如何在线程中获取spring 管理的bean
转载自:https://my.oschina.net/skyline520/blog/181158?fromerr=GjtR6Wec spring xml中定义 <!--spring 工具类-- ...
- [转]PowerDesigner中name和code取消自动关联
PowerDesigner中,但修改了某个字段的name,其code也跟着修改,这个问题很讨厌,因为一般来说,name是中文的,code是字段名. 解决方法如下: 1.选择Tools->Gene ...