JNI的使用

 ​
主要参照Java中调用C库函数_JoeySheng的专栏-移动互联网技术发展博客-CSDN博客_java调用c的lib库但是有些地方不一样,涉及原文的bug和环境差异。
第一步:编写Java代码
class HelloJNI{
// 本地方法声明
native void printHello();
native void printString(String str);
// 加载库
static{ System.loadLibrary("HelloJNI"); }
public static void main(String args[])
{
HelloJNI myJNI = new HelloJNI();
// 调用本地方法(实际调用的事使用C语言编写的JNI本地函数)
myJNI.printHello();
myJNI.printString("Hello World from printString fun");
}
}
第二步:编译Java代码
javac HelloJNI.java
第三步:生成C语言头文件
使用javah命令生成C语言头文件,命令如下
javah HelloJNI
可能原文撰写时间较早,这个命令其实在java10之后就不支持了,可以参照前一篇的tips
第四步:编写C代码
#include "CPP_JNI.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_test_printHello(JNIEnv *env, jobject object)
{
printf("Hello World!\n");
return;
}
JNIEXPORT void JNICALL Java_test_printString(JNIEnv *env, jobject object, jstring string)
{
// 将 Java String转换为C字符串
const char *str = (*env)->GetStringUTFChars(env,string,0);
printf("%s!\n", str);
return;
}
第五步:生成C共享库
将jni.h(\Java\jdk-11.0.2\include)和jni_md.h(\Java\jdk-11.0.2\include\win32)复制到到当前文件夹。
win下执行命令行
gcc -fPIC -shared HelloJNI.c -o HelloJNI.dll
这里我出了一个问题
 Can't load IA 32-bit .dll on a AMD 64-bit platform
jdk是64位的,然后gcc生成的dll是32位的,然后报错。所以重新装了64位的gcc,重新打包成功运行。
第六步:运行Java程序
java HelloJNI

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值