Mac系统下JNI实现native方法(Java调用C++语言的

2019-06-11  本文已影响0人  yunie

JNI的实现步骤如下:

  1. 编写带有native声明的方法的Java类
  2. 使用javac命令编译编写的Java类
  3. 使用java -jni **来生成后缀名为.h的头文件
  4. 使用其他语言(C、C++)实现本地方法
  5. 将本地方法编写的文件生成动态链接库
public class HelloWorld {
    public native void hello();

    static {
        //设置查找路径为当前项目路径
        System.setProperty("java.library.path", ".");
        //加载动态库的名称
        System.loadLibrary("hello");
    }

    public static void main(String[] args){
        new HelloWorld().hello();
    }
}

javac HelloWorld.java

java -jni HelloWorld #生成HelloWorld.h文件
HelloWorld.h文件如下

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

#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     HelloWorld
 * Method:    hello
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_HelloWorld_hello
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

根据生成的HellWorld.h文件编写实现文件HelloWorldImpl.cpp

#include "jni.h"
#include "HelloWorld.h"
#include <stdio.h>

JNIEXPORT void JNICALL Java_HelloWorld_hello(JNIEnv *, jobject) {
    printf("Hello Wordl!\n");
    return;
}

生成动态链接库 libhello.jnilib
g++ -dynamiclib -I /Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/include/ HelloWorldImpl.cpp -o libhello.jnilib

java HelloWorld

上一篇下一篇

猜你喜欢

热点阅读