Linux环境JNA加载动态库问题总结

最近项目涉及JNA加载动态库,因为Linux操作系统对文件权限控制比Win严格,所以很多问题在Win没出现,在Linux出现。

问题:linux环境下web应用通过jna加载so库失败,无报错,无崩溃。

可能原因1:

Web应用启动用户对So库所在目录无读写执行权限

解决方法1:

赋权限,chmod

解决方法2:

Web应用一般自动解压so库到${user.home}或者${tmp},通过启动变量给${user.home},${tmp}变量赋值控制解压到有权限的目录下。

        例如:tomcat中间件

        修改catalina.sh

        找到执行分支的JAVA_OPT,修改为下面示例,保证web应用启动用户对/xxx/xxx/目录有读写执行。

JAVA_OPTS="$JAVA_OPTS $JSSE_OPTS -Duser.home=/xxx/xxx/"

可能原因2:

jna加载调用动态库时会在tmp目录产生jna.xxxxxxxxxxxxxx的临时文件,若启动用户对tmp目录无对应权限会导致加载调用失败。

解决方法1:

找出jna产生tmp目录路径,chmod赋予权限。但是tmp路径不好查,不同用户可能也不一致。可以使用第二种解决方法。

解决方法2:

通过修改启动变量${jna.tmpdir},${java.io.tmpdir}指定tmp目录,${jna.debug_load}变量表示输出jna加载调so用过程的信息。

        例如:tomcat中间件

        修改catalina.sh

        找到执行分支的JAVA_OPT,修改为下面示例,保证web应用启动用户对/xxx/tmp/目录有读写执行。

JAVA_OPTS="$JAVA_OPTS $JSSE_OPTS -Djna.tmpdir=/xxx/tmp/ -Djava.io.tmpdir=/xxx/tmp/ -Djna.debug_load=true"

可能原因3:

Jdk版本与jna版本不适配,这种情况加载失败会出现明显的错误提示,自行更新版本即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LemonSmile_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值