• 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 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    『无为则无心』Python面向对象 — 58、类方法和静态方法
    16、Mybatis获取参数值的情况2(mapper接口方法的参数为多个时)
    Linux高性能服务器编程——ch7笔记
    Python语言学习:Python语言学习之网络爬虫/反爬虫技术相关的简介、案例应用之详细攻略
    基于Java的设计模式-策略模式
    文件操作及IO
    SourceTree配置代理详细方法
    Python使用大漠插件前的准备工作
    Linux的内存分页管理
    flutter获取字符串和json或者map的md5值
  • 原文地址:https://www.cnblogs.com/nanshaws/p/17918716.html