• 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
    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环境下跑一跑。
    好,完结


    __EOF__

  • 本文作者: nanshaws
  • 本文链接: https://www.cnblogs.com/nanshaws/p/17918716.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    求一份网页设计结课大作业,要求用到html,css,javascript,的知识
    牛客网刷题(BC72、BC18、BC83、BC84、BC41、BC31、BC17、BC6)
    Tableau 10 中的顶级可视化技术
    Dijkstra求最短路
    【学习笔记】C#基础 - 由C/C++衍生出来的面向对象的编程语言
    死锁的常见例子及 Python 模拟
    线上办理流量卡提示收货地址不规范,这种到底是什么原因呢?
    基于SpringBoot的大学生体质测试管理系统
    python中的函数(全)
    flink系列(一)flink部署及架构简介
  • 原文地址:https://www.cnblogs.com/nanshaws/p/17918716.html