解决 Java 中 'Native Library D:\syySdfHsm\msvcr110.dll already loaded in another classloader' 错误
发生该错误的原因是同一个 JVM 中,同一个 Native Library 只能被加载一次。如果在不同的 ClassLoader 中重复加载同一个 Native Library,就会出现该错误。
为了避免这个问题,可以尝试以下几种方法:
-
检查是否已经加载了该 Native Library:在加载之前,先通过 System.loadLibrary('libraryName') 检查该 Native Library 是否已经被加载。如果已经加载了,就不再重复加载。
-
将 Native Library 的加载放在主类中:将 static 块中的加载代码移到主类中,并确保只有在主类初始化时才会加载该 Native Library。这样可以保证 Native Library 只会被加载一次。
-
使用 URLClassLoader 加载 Native Library:使用 URLClassLoader 来加载 Native Library,而不是默认的 ClassLoader。这样可以创建一个新的 ClassLoader,并确保在不同的 ClassLoader 中加载 Native Library,避免重复加载的问题。
-
将 Native Library 放到系统目录中:将 Native Library 放到系统目录中(如 Windows 的 System32 目录),这样就不需要手动加载它了,系统会自动加载。
请根据具体情况选择适合的解决方法。
原文地址: https://www.cveoy.top/t/topic/qqJf 著作权归作者所有。请勿转载和采集!