写这个博客的目的:新人去看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环境下跑一跑。

好,完结

jextract的使用的更多相关文章

  1. NDK(22)JNI编程如何避免常见缺陷

    转自 : http://www.ibm.com/developerworks/cn/java/j-jni/index.html 避免常见缺陷 假设您编写了一些新 JNI 代码,或者继承了别处的某些 J ...

  2. JNI详解---从不懂到理解

    转载:https://blog.csdn.net/hui12581/article/details/44832651 Chap1:JNI完全手册... 3 Chap2:JNI-百度百科... 11 C ...

  3. (转)权威支持: 选择正确的 WebSphere 诊断工具

    权威支持: 选择正确的 WebSphere 诊断工具 原文:https://www.ibm.com/developerworks/cn/websphere/techjournal/0807_supau ...

  4. Acquiring Heap Dumps

      Acquiring Heap Dumps HPROF Binary Heap Dumps Get Heap Dump on an OutOfMemoryError One can get a HP ...

  5. Android Jni 调用

    Chap1:JNI完全手册... 3 Chap2:JNI-百度百科... 11 Chap 3:javah命令帮助信息... 16 Chap 4:用javah产生一个.h文件... 17 Chap5:j ...

随机推荐

  1. 【Visual Studio 使用技巧分享】任务列表的使用

    前言 Visual Studio 开发工具的熟练使用,能够潜在的提升我们工作效率,而且一些开发技巧的使用,会让我们的工作显得那么方便快捷.那么你知道VS中有哪些你不知道的使用小技巧呢?接下来,我们就来 ...

  2. Gradle 设置全局镜像源

    复制 init.gradle.kts 文件到 Windows 的 %USERPROFILE%/.gradle 或者 Linux 的 ~/.gradle 目录下.也可以直接复制文末的代码为 init.g ...

  3. Vue 核心技术

    1.1 Vue简介 1.1.1 官网 英文官网 中文官网 1.1.2 介绍与描述 动态构建用户界面的 渐进式 JavaScript 框架 作者:尤雨溪 1.1.3 Vue的特点 遵循 MVVM 模式 ...

  4. CCF PTA编程培训师资认证

    考试费用: 双会员500元,任意一方单会员750元,报名考试同时成为CCF专业会员850元,非会员1000元. P/T2补考费用:双会员200元,任意一方单会员300元,非会员400元. T1补考费用 ...

  5. 可观测性数据收集集大成者 Vector 介绍

    如果企业提供 IT 在线服务,那么可观测性能力是必不可少的."可观测性" 这个词近来也越发火爆,不懂 "可观测性" 都不好意思出门了.但是可观测性能力的构建却着 ...

  6. 基本操作:vscode快捷键

      1.复制,剪切 补选中具体内容的话,光标放在这一行的任何位置,输入Ctrl+C,就表示已经复制这一行了:直接Ctrl+V可以粘贴: 截切也一样:光标放在这一行的任何位置,输入Ctrl+X,就表示已 ...

  7. zabbix 监控 IPMI

    1.IPMI的相关介绍: 智能平台管理接口(Intelligent Platform Management Interface)原本是一种Intel架构的企业系统的周边设备所采用的一种工业标准.IPM ...

  8. ansible-playbook应用

    ansible-playbook剧本: 如上使用Ad-hoc方式点对点命令执行,可以管理远程主机,如果服务器数量很多,配置信息比较多,还可以利用ansible playbook编写剧本.从而以非常简单 ...

  9. QSplitter 自我总结

    ①.QSplitter(QWidget* parent = Q_NULLPTR); //构造函数 QSplitter(Qt::Orientation orientation , QWidget* pa ...

  10. 【pwn】[SWPUCTF 2021 新生赛]nc签到 --shell过滤字符

    附件下载打开: import os art = '''    ((  "####@@!!$$    ))       `#####@@!$$`  ))    ((  '####@!!$:  ...