Linux下JAVA程序调用so库报错UnsatisfiedLinkError

使用JAVA调用动态链接库(.so)是很常见的操作,JAVA提供了JNA和JNI两种方式进行调用,通常通过System.loadLibrary("xxx") 来加载库文件,非常方便。但在实际使用中,经常遇到UnsatisfiedLinkError的问题,此类问题通常有两个原因:

  1. 32位JDK调用64位库或64位JDK调用32位库。
  2. 路径问题。

第一个问题,动态链接库(.so)是有32位和64位的区别的,我们选择JDK时,一定要与动态链接库相匹配,不能错配。

第二个问题,需要关注两个地方:

1.正确命名库文件。

        当使用System.loadLibrary("xxx") 来加载库文件,在linux下,库文件的名称必须是:libxxx.so,也就是说在xxx前面要加lib前缀,这个是必须的,而且大小写敏感。

2.告诉jvm到那里去找这个库文件。

        需要设置 java.library.path 参数,加入so文件所在路径。在启动脚本中,可以通过java -Djava.library.path=/home/sw/pathtoso 的方式设置,其中/home/sw/pathtoso 是库文件所在目录。很多文章提到需要设置linux中的LD_LIBRARY_PATH变量,我尝试过,无效。所以正确设置 java.library.path 参数才是正解。

参考链接:

https://stackoverflow.com/questions/8058205/loading-a-linux-so-file-at-java-runtime

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值