美文网首页
Mac系统下JNI实现native方法(Java调用C++语言的

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

作者: yunie | 来源:发表于2019-06-11 22:20 被阅读0次

    JNI的实现步骤如下:

    1. 编写带有native声明的方法的Java类
    2. 使用javac命令编译编写的Java类
    3. 使用java -jni **来生成后缀名为.h的头文件
    4. 使用其他语言(C、C++)实现本地方法
    5. 将本地方法编写的文件生成动态链接库
    • 1. 编写带有native声明的方法的Java类
    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();
        }
    }
    
    • 2. 使用javac命令编译编写的Java类

    javac HelloWorld.java

    • 3. 使用java -jni **来生成后缀名为.h的头文件

    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
    
    
    • 4. 使用其他语言(C、C++)实现本地方法

    根据生成的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;
    }
    
    • 5. 将本地方法编写的文件生成动态链接库

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

    • 6 测试

    java HelloWorld

    相关文章

      网友评论

          本文标题:Mac系统下JNI实现native方法(Java调用C++语言的

          本文链接:https://www.haomeiwen.com/subject/gfthfctx.html