使用jna方式去调用so包里面的方法

最近做一个功能是使用jna方式去调用so包里面的方法

问题:
1、so包一定满足是linux下的,区分32还是64位
2、window下是dll文件,也是区分32还是64位

1、pom文件

<dependency>
	<groupId>net.java.dev.jna</groupId>
	<artifactId>jna</artifactId>
	<version>5.5.0</version>
</dependency>

<!-- https://mvnrepository.com/artifact/net.java.dev.jna/jna-platform -->
<dependency>
	<groupId>net.java.dev.jna</groupId>
	<artifactId>jna-platform</artifactId>
	<version>5.5.0</version>
	<exclusions>
		<exclusion>
			<artifactId>jna</artifactId>
			<groupId>net.java.dev.jna</groupId>
		</exclusion>
	</exclusions>
</dependency>

2 、创建java文件继承Library

public interface FaceLibraryNew extends Library {
    //我这里使用的是绝对路径
	public String soAddress="so包的地址";
	FaceLibraryNew INSTANTCE = (FaceLibraryNew) Native.load(soAddress, FaceLibraryNew.class);
    //这是一个String类型的参数
	public class GoString extends Structure {
        public static class ByValue extends GoString implements Structure.ByValue {}
        public String p;
        public long n;
		@Override
		protected List getFieldOrder(){
            return Arrays.asList(new String[]{"p","n"});
        }
    }
	/**
	 * @param img_path
	 * @return
	 */
	public String Detect(GoString.ByValue img_path);

}

3、调用方式

 //初始化
 FaceLibraryNew faceLibraryNew;= FaceLibraryNew.INSTANTCE;
 //调用内部方法,参数
 FaceLibraryNew.GoString.ByValue recognize = new FaceLibraryNew.GoString.ByValue();
 recognize.p = recognizeImg;
 recognize.n = recognize.p.length();
 //so包中的方法
 String detectRes = faceLibraryNew.Detect(recognize);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值