首页 > 编程语言 > 详细

Java笔记 #05# Java Native Interface

时间:2019-01-14 20:43:22      阅读:174      评论:0      收藏:0      [点我收藏+]

未完待续,留着备用。。。。。

参考资料:http://www.ntu.edu.sg/home/ehchua/programming/java/javanativeinterface.html(很详细)

看jdk源代码时,经常会看到类似下面的代码:

private native int read0() throws IOException; 

该类接口需要由c/c++实现。言下之意,该类方法的具体实现与特定操作系统密切相关。

 

1、尝试自己实现一个简单的native接口:

public class TestNativeMethod {

    public static native void sayHello();
    
    static {
        System.loadLibrary("sayHello_impl");
    } 

    public static void main(String[] args) {
        sayHello();
    }
}

直接编译是ok的,不过没法正常运行:

mdzz@LAPTOP-QGECNCGO MINGW64 /d/lab2
$ javac TestNativeMethod.java

mdzz@LAPTOP-QGECNCGO MINGW64 /d/lab2
$ java TestNativeMethod
java.lang.UnsatisfiedLinkError: no sayHello_impl in java.library.path
        at java.lang.ClassLoader.loadLibrary(Unknown Source)
        at java.lang.Runtime.loadLibrary0(Unknown Source)
        at java.lang.System.loadLibrary(Unknown Source)
        at TestNativeMethod.<clinit>(TestNativeMethod.java:6)
Exception in thread "main"

2、通过javah -jni TestNativeMethod命令得到TestNativeMethod.h(c/c++版本的“接口”):

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class TestNativeMethod */

#ifndef _Included_TestNativeMethod
#define _Included_TestNativeMethod
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     TestNativeMethod
 * Method:    sayHello
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_TestNativeMethod_sayHello
  (JNIEnv *, jclass);

#ifdef __cplusplus
}
#endif
#endif

3、书写相应的C/C++实现sayHello_impl.cpp

#include "TestNativeMethod.h"
#include <stdio.h>

JNIEXPORT void JNICALL Java_TestNativeMethod_sayHello(JNIEnv *, jclass) {
    printf("Hello, this is a native method.\n");
}

4、这个时候编译cpp是100%报错的,你需要找到本地jdk文件夹内的两个.h文件:jni.h以及jni_md.h然后添加过去。。。。。。。然后设法将jni_md.h、sayHello_impl.cpp、TestNativeMethod.h、jni.h弄成一个sayHello_impl.ddl文件。

PS. 本人没弄成功,好不容易弄出ddl,运行程序时却报了32bit的ddl和64bit平台不兼容,更新mingw64老半天进度条又没动静,so。。。。。。。。。

5、最后再次运行TestNativeMethod就行了。

 

Java笔记 #05# Java Native Interface

原文:https://www.cnblogs.com/xkxf/p/10268856.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!