JNA找不到指定的模块 & %1不是有效的win32程序

原创文章,转载请注明来源,作者:Gowcage

记录一下本人用JNA遇到的坑,希望顺便能帮助到和我遇到相同问题但还找不到原因的苦命人

首先,请打开jna的调试信息,这对找问题很有帮助

System.setProperty("jna.debug_load", "true");

DLL库搜索路径问题:
路径1:jna.library.path指定的路径

System.setProperty("jna.library.path", "D:\\lib");//设置JNA加载库的路径,否则可能找不到,依赖的库只要和libPaging-pb在同目录下,可不必单独加载

路径2:工程out->production->“项目名”
JNA找不到指定的模块 & %1不是有效的win32程序_第1张图片
例如放在图中JNADemo目录下面,这还是我从jna日志中发现的查找路径
在这里插入图片描述
(别看它长就不仔细看,还是有用的)
网上还有说lib目录下也行,src目录下也行的,还有说放在jar文件中的等。(没验证过)

报错:unable to load library ‘xxx’:找不到指定的模块
问题原因: 指定加载的库缺少依赖库,一般都是SDK库是debug版本编译导致的,若是发行版就不会有这个问题
解决办法: 如果本身SDK的库是齐全的,那就是系统中的库缺少了,一般是C:\Windows\System32或C:\Windows\SysWOW64下缺少某些库,此时可将能正常运行的电脑中的库全部复制过来,跳过已有的,将没有的添加进去。

报错:%1 不是有效的 win32 程序
问题原因: 系统和jdk都是64位的,加载的库是32位的
解决办法: 换成相同位数的库

还有,这时如果安装微软VC++运行环境集合等这类方式是无法解决问题的,因为此类集合都是发行版的库(目前测试了公司的几台电脑和虚拟机都没遇到过安装环境集合就能正常跑起来的)
像这种 ↓
在这里插入图片描述
JNA找不到指定的模块 & %1不是有效的win32程序_第2张图片
本人遇到最好的一次情况只缺少一个库:ucrtbased.dll。
还有一个vcruntime140d.dll,诸如此类,可能是SDK的库中所依赖的一些系统库

一般情况下,把上述问题都检查一遍大部分都是能解决的,若仍然报错,欢迎留言,一起探究解决办法

这个Demo由于使用的公司SDK的库,需配合服务器才能用,就先不上传了,后面我会单独编译几个库,重写个demo上传,方便大家调试。

你可能感兴趣的:(记录,java)