`
samyou
  • 浏览: 108020 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

eclipse 下实现java JNI 初探

    博客分类:
  • java
阅读更多
/*by sam哥*/
JNI一般用在调用c或者c++的链接库,由于JNI调用时一般需保证名称一致,所以一般做法是先写java函数名再去写c/c++(你nb了就不用这么干了)
我做了个入门级的教程,适合对c/c++懂得不多的童鞋
这个例子里去调用本地的numplus接口实现两整数相加
首先是java的函数申明
//NativeMethod.java,主要用来放jni接口
//以下都用的default package

public class NativeMethod 
{
	public static native int numplus(int a,int b);
}

//Main.java,用来调用测试jni接口
public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) 
	{
		System.out.println(NativeMethod.numplus(1, 2));
	}
	
	static{
		System.loadLibrary("jnidll");
	}
	

}

搞完后在eclipse里面会生成NativeMethod.class文件,cmd窗口过去,输入javah -jni NativeMethod生成NativeMethod.h文件,这个就是jni的c++申明了。
注意使用该命令时到class文件根目录下执行,即如果类在/bin/test/jni/MyJni.class,则需要到bin目录下执行javah -jni test.jni.MyJni
为了制作dll,我用的code blocks,比较轻量级不像vc不太好卸载
打开code blocks,新建工程选新建动态库工程

建好后将系统生成的main.cpp和main.h删掉不要(你要也行),将上面javah生成的NativeMethod.h拷贝进来,然后新建NativeMethod.cpp,然后将jdk安装目录下C:\Program Files\Java\jdk1.6.0_05\include的所有.h文件拷贝到工程里,你也可以引用到工程里,但我对codeblocks不熟所以用的比较笨的办法。如图:



然后在NativeMethod.cpp实现该方法,点击左上角的编译,成功后会在workspace里的debug目录下生成dll;
最后将这个dll拷贝到eclipse工程根目录下运行。OK。
我在弄得时候出现了java.lang.UnsatisfiedLinkError,没搞清楚原因,但是找到了解决办法:
这是别的大牛的解决问题的方法:
http://dikar.iteye.com/blog/382701
我用的是在方法名前面加下划线,别说,还真就行了。
好了,eclipse工程和codeblocks工程都发上来,大家一起入门吧。
/*by sam哥*/




  • 大小: 7.2 KB
  • 大小: 25.6 KB
分享到:
评论

相关推荐

    简洁使用 eclipse+mingw 环境编译 java jni

    通过以上步骤,你已经成功地在Eclipse和MinGW环境下构建了一个Java JNI项目。这个过程中,Eclipse提供了方便的集成开发环境,而MinGW则提供了编译C/C++代码的能力。这种组合为Java开发者提供了在不离开熟悉环境的...

    java jni简单实例

    通过运行这个实例,我们可以学习到如何设置JNI环境,如何在Java中声明本地方法,如何在C/C++中实现这些方法,以及如何在Java程序中调用本地方法。这个过程对于理解和掌握JNI非常重要,因为它是Java与C/C++等其他语言...

    eclipse ndk Hello-jni

    eclipse ndk Hello-jnieclipse ndk Hello-jnieclipse ndk Hello-jnieclipse ndk Hello-jni

    配置NDK集成eclipse使用hello-jni实例

    hello-jni是一个基本的示例,用于演示如何在Android应用中调用本地C/C++代码,通常包括JNI头文件的生成、本地方法的声明和实现,以及在Java代码中调用这些方法。这个过程有助于理解NDK的使用流程,并为进一步的...

    Java JNI调用IC卡读卡器

    在这个场景中,我们需要通过JNI来调用IC卡读卡器的DLL(动态链接库),该DLL可能是由非Java语言编写的,以实现与IC卡的通信。 首先,我们需要理解DLL的作用。DLL文件是Windows操作系统中的一个可执行文件,其中包含...

    JAVA通过JNI调用C#dll的整个项目工程

    本项目工程提供了完整的Java、C++和C#的示例,可以帮助开发者理解如何在实际项目中实现Java通过JNI调用C# DLL的过程,从而提升应用的性能或实现特定的功能。通过学习和实践这个工程,开发者可以进一步提升跨语言编程...

    C++库封装JNI接口-实现java调用c++

    总结,C++库封装JNI接口实现Java调用C++涉及的主要步骤包括:声明Java中的本地方法,生成JNI头文件,编写C++实现,编译成库,最后在Java中加载并调用。这个过程需要理解Java和C++之间的数据类型转换,以及如何在两种...

    eclipse使用jni的简单实例

    在本实例中,我们将探讨如何使用Eclipse集成开发环境来创建一个简单的JNI项目,实现C语言与Java之间的字符串传递。 首先,我们需要了解JNI的基本概念。JNI提供了一种方式,使得Java应用程序能够调用本地(非Java)...

    JNI 调用实例(java JNI cpp互相调用实例)

    本文旨在介绍 Java 和 C++ 之间的互相调用实例,通过 JNI(Java Native Interface)技术,实现 Java 调用 C++ 和 C++ 调用 Java 的操作。下面将对标题、描述、标签和部分内容进行详细说明。 标题:JNI 调用实例...

    JAVA JNI C++调用示例

    总结,此示例展示了如何通过JNI在Java程序中集成C++代码,实现跨语言调用。从头文件的生成到动态库的创建,再到JAR包的运行,整个流程涵盖了许多技术细节,对于理解和实践Java与C++之间的互操作性至关重要。

    java jni 传递结构体

    文档里描述了如何通过jni方法在java与c++代码之间传递非基本类型数据

    Eclipse_Jni_Opencv_NDK

    标题"Eclipse_Jni_Opencv_NDK"涉及的是在Eclipse环境下使用JNI(Java Native Interface)集成OpenCV库,并通过NDK(Native Development Kit)进行原生代码开发。这是一个关于Android平台上的混合编程实践,旨在利用...

    java jni教程

    JNI在Java平台中扮演着至关重要的角色,它允许Java开发者调用和被本地代码调用,实现了Java与其他编程语言的无缝集成。下面我们将深入探讨JNI的相关知识点。 1. **JNI基础知识**: - JNI接口:JNI是一套标准的...

    Java JNI调用动态库(Linux、Windows)的实现步骤

    ### Java JNI调用动态库(Linux、Windows)的实现步骤 #### 一、概述 Java Native Interface (JNI) 是一种标准的 Java 接口,它允许 Java 代码和其他语言(如 C 或 C++)编写的代码进行交互。通过 JNI,Java 应用...

    JAVA JNI调用DLL完整步骤

    在某些场景下,比如调用操作系统特定的功能或者利用已有的C/C++库,我们需要使用JNI来实现Java与本地代码(如DLL动态链接库)的交互。本教程将详细介绍如何通过JNI在Java中调用DLL的完整步骤。 1. **创建Java类和...

    Android C、Java、JNI效率测试结果.doc

    Android C、Java、JNI效率测试结果分析 Android 操作系统中,效率测试是一个非常重要的方面,特别是在使用 JNI(Java Native Interface)调用 C 语言时。这个文档描述了 Android G1 环境中,C、Java、JNI 调用(C ...

    Java jni调用c实例

    Java JNI(Java Native Interface)是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。JNI在很多场景下被使用,比如优化性能、利用已有的C/C++库或者访问操作系统特定的功能。在这个"Java jni调用...

    JAVA项目JNI调用dll实现DEMO源码,C++&JAVA

    完整的实现java跨平台调用C程序源码,包含JAVA源码和C源码以及编译后的demo dll。将dll放到jdk bin目录下,java 项目可以直接运行。若要修改dll可以,修改C源码后重新编译生成dll。该demo处理了多线程调用c,全局...

Global site tag (gtag.js) - Google Analytics