eclipse下JNI的初步实现

eclipse下JNI的初步实现

     JNI=java native interface, 为java应用程序提供调用本地方法的接口
     The standard Java class library may not support the platform-dependent features needed by your application.
    You may already have a library or application written in another programming language and you wish to make it accessible to Java applications.
    You may want to implement a small portion of time-critical code in a lower-level programming language, such as assembly, and then have your Java application call    these functions

步骤:
1.编写带有native声明的方法的java类

package  jni;

public   class  HelloWorld  ... {
    
static...{
        System.loadLibrary(
"hellodll");
    }


    
public native void dispHelloWorld();
    
/** *//**
     * 
@param args
     
*/

    
public static void main(String[] args) ...{
        
// TODO Auto-generated method stub
        
//System.out.println("abc");
        new HelloWorld().dispHelloWorld();
    }


}


2,保存后如果没有错误eclipse会编译产生jni/HelloWorld.class


3,假设工程产生的class都在 classes文件夹下(这个文件夹名字跟个人eclipse设置有关,也可能就是工程根目录),那么控制台cd到classes用javah命令产生h 文件,XXX/classes>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

4,写cpp,实现jni_HelloWorld.h中的函数,这里请注意函数名,cpp里的函数名跟h文件的函数名要一致,如果是从网上 copy的一些例子,函数名跟你例子的名字不一致虽然之后可以正确编译并产生dll,但是最终运行java程序链接的时候会出错,抛出 java.lang.UnsatisfiedLinkError异常,本人就在此浪费了很长时间。


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;
}

5,编译cpp产生dll,在控制台下>cl -I%java_home%\include -I%java_home%\include\win32 -LD jni_HelloWorldImp.cpp -Fehellodll.dll

以上命令的参数中,-I表示编译包含的额外目录,-LD表示产生dll,-Fe后面表示产生dll的名字,具体的参数可以自己用cl -help命令查看。

如果成功编译,会产生hellodll.dll,hellodll.lib,hellodll.exp三个文件,将hellodll.dll考到工程根目录下。

6,运行java程序,输出Hello world !

参考来源:http://xiaomao870311.blog.51cto.com/1458701/545717
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值