java jna 报错:Unable to load library

  这个错误是真的有时候让人头疼,为了让有同样问题的同学少走弯路,以此分享我处理这个报错的经验。

  这个错误很明显是无法加载到指定的动态链接库,但是为什么无法加载确没有具体显示出来,是路径不对呢,还是 dll 的平台与当前 jvm 的平台不匹配没有在错误信息中显示出来。所以需要一步一步排除找原因。

  1)首先你要明确知道这个 dll 动态链接库是 32 位的还是 64 位的编译的,与之对应的就是你的 java 版本也是要对应的 32 位或者 64 位的。

  2)确认了第一点那么基本的环境就没问题了,然后是填写路径,一般路径可以是填相对路径还是绝对路径,为了避免可能出现未知错误,强烈建议还是填写绝对路径,绝对路径要是反斜杠 "\", 为了避免出错可以直接在 IDE 工具里面找到对应的 dll 文件右键 copy path,如下图 2.1

           图 2.1

 

粘贴到加载 dll 路径的方法里作为参数,效果如下图 2.2

           图 2.2

 

 坚持一个原则能复制粘贴就不要自己手动输入!

  3)前面两步如果可以保证正确的话,那么基本上是可以加载成功的,如果还是失败那请再回去验证前面的步骤,如验证 j 程序运行是不是在你预期的 jvm 之上

点击运行程序看看当前运行的 jdk 版本是哪一个,如下图 3.1

              图 3.1 

接下来就是 cmd,运行 java  -version,看下图 3.2 所示的 jdk 版本是 32 位,还是 64 位。jdk 版本一致,且是 64 位,那么与我的 dll 是相同的平台,

               图 3.2

 

 那么可以验证下 dll 是不是 64 位或者 32 位就好了,验证方法自行百度或者参照这位博主的https://www.cnblogs.com/Czhenyu/p/6439383.html

最后就是路径问题了,如果你是按照我的操作来的那么路径就不会有问题,应该是正常运行的。

  4)到这一步,你的程序还是无法加载 dll 文件的话,我只能提供思路就是,你的 dll 是否还引用了其它的 dll 文件,其它的 dll 文件的平台与当前不一致。或者找你得到 dll 来源,确认这个 dll 是否可以用,dll 文件时可以用 visual studio 2017 或其它把版本工具用 C# 代码直接引用调用的,当然你也可以用哪个工具打包一个 dll。

 最后总结一下:1. 平台要一致,平台要一致,平台要一致,重要的事情说三遍。

       2. 路径问题,最好是绝对路径。