您的位置 首页 java

JAVA调用golang动态链接库

有些场景下如icmp使用 JAVA 开发还是比较麻烦的,如果可以使用golang语言类库提供的能力那就比较方便,开发起来也比较轻松了。这里使用jdk19快要正式发布的foreign function代码实现,以prometheus blackbox exporter为例进行说明。

需求大概是这样,要做一个监控,主体或者是关键特性需要使用java实现,但 ping 功能希望使用blackbox exporter来实现,如果是独立运行也是可以,但为了考虑更好的管理,希望将exporter编译成动态链接库集成到JAVA中来使用,这样两者就充分融合了。

实现方式是这样

1、 git 下载

1、需要安装golangci-lint

2、 linux 下安装yum group install “Development Tools”,windows下安装cygwin64,构选developmenet包进行安装

3、进入目录运行make初始化生成文件

4、修改main.go文件,使其可以输出动态链接库

import “C”

// export DoMain

func DoMain() {

args := [1]string{“javaw.exe”}

os.Args = args[:]

main()

}

6、 编译生成动态链接库

go build -ldflags ‘-w -s’ -buildmode=c-shared -o blackbox.dll

7、使用jextacter辅助生成调用方法

首先下载

使用方法来创建类文件

jextract –source -l blackbox -t github.com.prometheus.blackboxexporter blackbox.h

8、使用JAVA调用

将jextact生成的文件放入项目中,使用下面的测试代码进行测试

package github.com.prometheus.blackboxexporter;

import static github.com.prometheus.blackboxexporter.blackbox_h.*;

import static org. junit .Assert.*;

import java.lang.foreign.MemorySession;

import org.junit.Test;

public class BlackboxTest {

@Test

public void testBlackbox() {

try (var session = MemorySession.openConfined()) {

DoMain();

}

}

}

文章来源:智云一二三科技

文章标题:JAVA调用golang动态链接库

文章地址:https://www.zhihuclub.com/196537.shtml

关于作者: 智云科技

热门文章

网站地图