您的位置 首页 java

JNI开发实战

前言

本文主要介绍了如何在Linux环境下进行JNI的开发。

正文

  • 创建JNI接口文件与主函数文件
  • BIU_JNI. java

     package com.biu.demo;
    
    public class BIU_JNI {
    	 static  {
    		System.out.println("BIU_JNI so load start");
            System.loadLibrary("BIU_JNI");
            System.out.println("BIU_JNI so load success");
        }
    
        public static native int sum(int a, int b);
    }  

    TestJni.java

     package com.biu.demo;
    import com.biu.demo.BIU_JNI;
    public class TestJni {
    	
    	public static void main(String[] args) {
    		int res = BIU_JNI.sum(2000,20);
    		System.out.println("res:"+res);
    		return;
    	}
    }  
  • 编译全部代码
  • 在Linux下输入命令:javac -d . com/biu/demo/*.java

  • 打包Jar包
  • 在Linux下输入命令:jar -cvf TestJni.jar com/biu/demo/

  • 生成JNI .h头文件
  • 在Linux下输入命令:javah -jni -classpath TestJni.jar com.biu.demo.BIU_JNI

  • 编译.so库文件( libBIU_JNI.so
  • 生成的com_biu_demo_BIU_JNI.h头文件如下

     /* DO NOT EDIT THIS FILE - it is machine generated */
    # include  <jni.h>
    /* Header for class com_biu_demo_BIU_JNI */
    
    #ifndef _Included_com_biu_demo_BIU_JNI
    #define _Included_com_biu_demo_BIU_JNI
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
     * Class:     com_biu_demo_BIU_JNI
     * Method:    sum
     * Signature: (II)I
     */
    JNIEXPORT jint JNICALL Java_com_biu_demo_BIU_1JNI_sum
      (JNIEnv *, jclass, jint, jint);
    
    #ifdef __cplusplus
    }
    #endif
    #endif  

    编写对应 源文件 内容

     #include "com_biu_demo_BIU_JNI.h"
    
    /*
     * Class:     com_biu_demo_BIU_JNI
     * Method:    sum
     * Signature: (II)I
     */
    JNIEXPORT jint JNICALL Java_com_biu_demo_BIU_1JNI_sum
    (JNIEnv*, jclass, jint A, jint B)
    {
        return (A + B);
    }  

    编译过程中报如下找不到”jni.h”的错误

    需要到Linux编译服务器找到jdk/include目录下的”jni.h”与”jni_md.h”,加入到程序中一起编译。

    编译so包OK

  • 运行jar包
  • 将jar包与so库文件放到同一目录下,

    在Linux下输入命令:java -classpath TestJni.jar com.biu.demo.TestJni

    运行报错,输入如下命令设置库文件路径:export LD_LIBRARY_PATH=./
    再次运行,运行成功。

    本文完。

    文章来源:智云一二三科技

    文章标题:JNI开发实战

    文章地址:https://www.zhihuclub.com/188237.shtml

    关于作者: 智云科技

    热门文章

    网站地图