IntelliJ IDEA平台下JNI编程

IntelliJ IDEA平台下JNI编程

  • 使用JNI,那就不可避免地需要将C/C++文件编译成dll(windows)或so(Linux)文件
  • 在Java代码中需要将调用的C++方法用native修饰。同时在初始化主方法之前需要加载库。(函数System.loadLibrary()是加载dll(windows)或so(Linux)库,只需名称即可,无需加入文件名后缀(.dll或.so)。native关键字将函数sayHello()声明为本地函数,由C/C++实现。具体的实现就在hello.dll(Windows平台)或hello.so(Linux平台)中)
  • JNI生成头文件是通过JDK中提供的javah来完成,javah在 {JDKHome}/bin目录中。
  • 成的.h头文件 一般如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_zhonghao_java_HelloJNI */

#ifndef _Included_com_zhonghao_java_HelloJNI
#define _Included_com_zhonghao_java_HelloJNI
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_zhonghao_java_HelloJNI
 * Method:    sayHello
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_com_zhonghao_java_HelloJNI_sayHello
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif
  • 接下来我们只需实现Java_com_zhonghao_java_HelloJNI_sayHello
    (JNIEnv *, jobject)即可。仔细观察就会发现这个函数名称是有规律的,即Java_<包><类名><函数名>,JNIEXPORT和JNICALL这两个宏定义暂时不用管。
  • 在jni目录中新建HelloJNI.c文件,这里就是需要调用的C方法
#include<jni.h>
#include <stdio.h>
#include "com_zhonghao_java_HelloJNI"

JNIEXPORT void JNICALL Java_com_zhonghao_java_HelloJNI_sayHello(JNIEnv *env, jobject thisObj) {
   printf("Hello World!\n");
   return;
}
  • 之后就是使用工具将该c编译成dll的动态链接库.方法很多,这里不予详写
  • 此时执行java代码,即可以调用到C中的方法。打印出Hello World!
  • 项目地址点击这里
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fighting_Boss_Hao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值