Java 21运行时动态加载外部本地库至JVM的问题求助
Java 21运行时动态加载外部本地库至JVM的问题求助
我需要在Java 21的JVM运行时加载一个包含DLL文件的外部库目录(例如Lic\64bit),并且不能使用反射和Java Foreign Function & Memory API(FFM)。我尝试了几种方法都未能成功加载库,后来发现JAVA_LIBRARY_PATH是一个private static final变量,无法直接修改。
我先尝试了以下代码来更新java.library.path系统属性:
private static void loadAllDLLs(String libraryPathToAdd) { final String[] userPath = initializePath("java.library.path"); String ps = System.getProperty("path.separator"); //check if the path to add is already present for (String path : userPath) { if (path.equals(libraryPathToAdd)) { return; } } StringBuilder pathBuilder = new StringBuilder(); for (String pathToAdd : userPath) { pathBuilder.append(pathToAdd).append(ps); } pathBuilder.append(libraryPathToAdd); // Update java.library.path once with all paths String finalPath = pathBuilder.toString(); System.setProperty("java.library.path", finalPath); String[] newUserPath = initializePath("java.library.path"); for (String up : newUserPath) { System.out.println("New User Path ----> " + up); } }
从输出可以看到,java.library.path确实已经包含了我要添加的目录,但当我用下面的代码验证库是否成功加载时,却抛出了UnsatisfiedLinkError,提示找不到指定库:
private static void loadLibraries() { String libraryPath = System.getProperty("java.library.path"); System.out.println("java.library.path: " + libraryPath); try { System.loadLibrary("webcam-capture-driver-native-64"); System.out.println("Library loaded successfully."); } catch (UnsatisfiedLinkError e) { System.err.println("Failed to load library: " + e.getMessage()); } }
明明System.getProperty("java.library.path")的输出显示目标库所在目录已经被添加进去了,但调用System.loadLibrary时还是失败。有没有人遇到过类似的问题?或者有没有其他可行的方法,能在不使用反射和FFM的前提下,在运行时动态加载这个本地库?
备注:内容来源于stack exchange,提问作者Anjana
相关产品推荐
相关产品推荐

