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

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

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

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

javalibrary图书馆帖子 javalibrary图书馆进不去_无法加载

图2.1

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

javalibrary图书馆帖子 javalibrary图书馆进不去_无法加载_02

图2.2

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

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

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

javalibrary图书馆帖子 javalibrary图书馆进不去_java library jna_03

图3.1

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

javalibrary图书馆帖子 javalibrary图书馆进不去_绝对路径_04

图3.2

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

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

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

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