如题,提示异常:java.lang.UnsatisfiedLinkError: 动态链接库(DLL)初始化例程失败。
代码:
ReadCardJna readCard = Native.load("readcard",ReadCardJna.class);
目前动态库文件放在程序根目录。
该错误通常表示您的Java程序无法加载指定的动态链接库文件。这可能是由于以下原因之一导致的:
动态链接库文件不在正确的位置。
请确保将readcard.dll文件放在正确的位置。您可以使用绝对路径指定动态链接库的位置,而不是使用相对路径。
动态链接库文件缺少其他依赖项。
请检查您的动态链接库是否依赖于其他动态链接库或系统库。您需要确保这些依赖项也可用,并已正确配置。
动态链接库文件与您的Java程序不兼容。
请确保您的动态链接库与您的Java程序兼容,并且它们都是使用相同的架构编译的(例如,32位或64位)。
建议您检查上述原因,并尝试解决问题。如果您仍然无法解决问题,请提供更多细节,以便我可以提供更准确的建议。
windos是64位,jdk是32位,tomcat32位。idea开发。
我用了2中方式加载类库仍旧不行。
方式一:
static {
System.loadLibrary("readcard");
}
public native Object ReadSSECard_s();
public static void main(String[] args) {
ReadCardJnaTest readCardJnaTest = new ReadCardJnaTest();
Object o = readCardJnaTest.ReadSSECard_s();
System.out.println(o);
}
方式二:
public interface ReadCardJna extends Library {
ReadCardJna readCard = Native.load("readcard",ReadCardJna.class);
Object ReadSSECard_s();
public class Main{
public static void main(String[] args) {
System.setProperty("jna.library.path", "E:\\computer\\allInstall\\readcard20211213");
Object certificate = ReadCardJna.readCard.ReadSSECard_s();
System.out.println(certificate);
}
}
}
异常:
thread "main" java.lang.UnsatisfiedLinkError: 找不到指定的模块。
@明日小路: csdn提问的是你吧,我昨天说的那个有没有试试,就是你电脑确实vc++ 运行库,2015,2020等。 还有一个问题就是你这个dll本身就是有问题的,你说了是别人给的,这个无法保证他是否完整的。
@南宫懿痕: 是我,下载VC++ 装了,还是没效果。
@明日小路: 我感觉你那个dll本身就有问题。我试下自己生成的
@明日小路: 果然是你的dll有问题,,我刚才试下其他dll都是可以的
@南宫懿痕: 对方还有个 readcard.lib 文件,跟这个有关系吗?我把这个 readcard.lib 跟 readcard.dll 放一块,也不行。
@明日小路: 这个dll你可能要问下给你的人,我这边刚才加载一下aspsoe.cell.dll 这个是没问题。这个dll是第三方公司开发的操作excel的。
我也遇到这个问题了,请问解决了吗
把对方的DLL ,丢到对应的环境下。我的DLL是win 32位的,我把它丢到tomcat32 下。注意,它相应的依赖也要丢进去。
@明日小路: 你那边的dll文件方便发我一份不,我感觉我这边的文件有问题 只有700多K 邮箱rayboo@qq.com 谢谢
@rayboo: 抱歉,这个给不了,算是ZF的DLL,不敢随意给;且我这边的DLL单个也运行不了,还有我不知道的依赖。
@明日小路: 好的 谢谢
@明日小路: 我这边的 dll 文件名字跟你一摸一样 也是 readcard20211213 这个,我试下把它放到32位的Tomcat ,方便加个微信不 Raysboo
@rayboo: 你先试试行不行; 如果你知道dll的依赖,那就把它丢到tomcat32 的src 目录下,如果不知道dll的全部依赖,那就把对方提供的所有文件丢到bin下就好了;我就是这么干的。
@明日小路: 你调试的电脑连着医保专网没有,我现在是在自己的电脑上没有连接医保专网
@rayboo: 我就是放在专网的电脑上测试的。