Jar包中利用JNA引用so文件总结
前提:有一个web项目用spingboot开发,发布到生产服务器上发布成jar;在idea本地window环境中调试或打包成jar运行没有问题;但发布到linux服务器(64位)上就提示出错;包中引用一个另一个部门开发的功能插件,打包成dll和so两个文件,都是64位。经过各种查找测试最终解决方案如下:1.如果项目资源是下面这样的,dll、...
前提:
有一个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中方法,成功。
希望对各位有所帮助
更多推荐
所有评论(0)