jextract的使用
写这个博客的目的:新人去看jextract的官网是看不懂的,就算看懂了也不会使用,一头雾水,我会从0开始教如何使用,如何搭配java去调用c函数。
首先我们得了解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
下载并解压:
然后配置一下环境变量:
jextract的使用
先写个.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目录下面
使用jextract
jextract --source -t org.jextract point.h
展示效果图:
然后你运行是肯定必报错的,因为没有链接到lib里面
真正使用jextract应该这样使用
jextract --source -t 生成的包目录 -l链接lib库 文件.h
这样就链接到了。
不过我的建议是官网有一个这样的例子:
https://github.com/openjdk/jextract/tree/master/samples/helloworld
兄弟们可以下载起来,然后在linux环境下跑一跑。
好,完结
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)