前提:

       有一个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中方法,成功。

 

希望对各位有所帮助

 

Logo

更多推荐