从此
📄文章 #️⃣专题 🌐上网 📺 🛒 📱

🏠 » 📄文章 » 内容

jextract 抽取C库头文件生成 OpenJDK Foreign Function & Memory API 绑定类

🕗2023-12-21
 欢迎来访!

首先我们得了解jextract是什么,官网的解释是一种从本机库头文件机械地生成 Java 绑定的工具。该工具利用 clang C API 来解析与给定本机库关联的标头,生成的 Java 绑定基于 Foreign Function & Memory API。该工具最初是在 Project Panama 的背景下开发的(然后在 Project Panama Early Access 二进制文件中提供)。
官网链接:https://github.com/openjdk/jextract
为什么会考虑到使用jextract呢?因为jni的那个太老而且操作太繁琐了
接下来开始讲解如何使用jextract

jextract-21的文件的下载

jextract-21的windows版本的文件下载链接:https://download.java.net/java/early_access/jextract/1/openjdk-21-jextract+1-2_windows-x64_bin.tar.gz

下载并解压,然后配置一下环境变量,先写个.h的头文件:

//point.h

include<stdio.h>

void sayHello();

 

然后再写个.c的实现源文件:

include "point.h" 

void sayHello(){

  printf("hello world");

}

 

接下来就是编译链接成lib:

gcc -c point.c

ar -cr pointlib.lib point.o

 

jextract参数 --source 是生成java资源文件的
而-t是生成到某个目录的名称
比如说:
jextract --source -t org.jextract point.h

就是生成java源代码并存放到本地目录的org.jextract目录下面

此时你运行是肯定必报错的,因为没有链接到lib里面
真正使用jextract应该这样使用:

jextract --source -t 生成的包目录 -l链接lib库 文件.h
即 jextract -t org.hello -lhelloworld helloworld.h

这样就链接到了。官网有一个这样的例子:

https://github.com/openjdk/jextract/tree/master/samples/helloworld

兄弟们可以下载起来,然后在linux环境下跑一跑。
好,完结