Jar包中利用JNA引用so文件总结

本文详细介绍了使用SpringBoot开发的Web项目在Linux服务器上部署时遇到的DLL和SO文件加载错误问题及解决方案。通过调整资源文件路径和修改POM配置避免压缩SO文件,成功解决了 UnsatisfiedLinkError 异常。

前提:

       有一个web项目用spingboot开发,发布到生产服务器上发布成jar;在idea本地window环境中调试或打包成jar运行没有问题;但发布到linux服务器(64位)上就提示出错;包中引用一个另一个部门开发的功能插件,打包成dll和so两个文件,都是64位。

        经过各种查找测试最终解决方案如下:

        1.如果项目资源是下面这样的,dll、so在resources下

              错误信息:Caused by: java.lang.UnsatisfiedLinkError: Unable to load library 'XXXX': Native library (linux-x86-64/XXXXX.so)

              解决方案:把so文件放在linux-x86-64下

              

        2.经过上面设置后,错误信息变为如下:

org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.UnsatisfiedLinkError: /tmp/jna--851256601/jna5078348374504753050.tmp: ELF file's phentsize not the expected size
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1054)

           以为是so包的原因,很建demo 生成jar包测试没有问题,最好发现是我的spintboot默认把资源问题压缩了,需要排除掉到so文件压缩

           解决方案:在pom中把so文件过滤掉,如下设置

            

有的说加环境变量,拷贝so到 /lib下、/usr/lib、jdk的 lib/amd64下等,本人测试不需要;

 运行 java -jar xxxx.jar,调用so中方法,成功。

 

希望对各位有所帮助

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值