前提:
有一个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中方法,成功。
本文详细介绍了使用SpringBoot开发的Web项目在Linux服务器上部署时遇到的DLL和SO文件加载错误问题及解决方案。通过调整资源文件路径和修改POM配置避免压缩SO文件,成功解决了 UnsatisfiedLinkError 异常。
335

被折叠的 条评论
为什么被折叠?



