Linux下JNI demo

本文探讨了如何将Java函数用C语言实现,以提高代码执行效率。通过创建本地方法并使用JNI(Java Native Interface),可以在Java代码中调用C实现的函数。示例展示了如何生成头文件、编写C代码、编译成共享库,并最终在Java程序中调用。这种方法在需要高性能计算或利用特定平台功能的场景下特别有用。
摘要由CSDN通过智能技术生成
  1. 核心

    • 核心

      • java函数用C语言实现逻辑
    • 好处

      • C代码效率高,在某些情况下更适合.
  2. java代码

    • 代码

      public class Test
      {
         public native void show();
         public static void main(String[] args)
         {
             System.load("/path/to/Test.so");
             (new Test()).show();
         }
      }
      
      
    • 说明

      • show和普通函数一样.
      • Test.so路径是绝对路径.
      • 加了native表示是C实现,需要从共享库中找对应的实现.
  3. C实现

    • 获取函数的类型和函数名

      • javah Test得到头文件.
      • 头文件内容是对应的函数名和类型以及说明.
    • 头文件

      /* DO NOT EDIT THIS FILE - it is machine generated */
      #include <jni.h>
      /* Header for class Test */
      
      #ifndef _Included_Test
      #define _Included_Test
      #ifdef __cplusplus
      extern "C" {
      #endif
      /*
      * Class:     Test
      * Method:    show
      * Signature: ()V
      */
      JNIEXPORT void JNICALL Java_Test_show
       (JNIEnv *, jobject);
      
      #ifdef __cplusplus
      }
      #endif
      #endif
      
    • 函数名

      • Java_${packet_name}_${class_name}_${function_name}.
      • 这里对应Java_Test_show,因为packet_name为空.所以去掉了_${packet_name}.
  4. 实现java代码

    • c实现

      #include"Test.h"
      #include<stdio.h>
      JNIEXPORT void JNICALL Java_Test_show
       (JNIEnv *env, jobject object)
      {
             printf("c print\n");
      }
      
    • 编译

      • gcc -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux Test.c -fPIC -shared -o Test.so
      • JAVA_HOME是配置的环境变量,可以直接替换成java所在目录.
  5. 执行

    • javac Test.java && java Test
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值