以编程方式设置 Java.library.path

2022-09-03 04:30:27

我可以从java代码本身以编程方式设置java.library.path吗?

以下情况不起作用。

    System.setProperty("java.library.path", "/blah");

答案 1

也许这会有所帮助:以编程方式设置“java.library.path”

当搞砸JNI时,必须相应地设置。不幸的是,唯一的方法是在应用程序启动之前添加系统属性:java.library.path

java -Djava.library.path=/path/to/libs  

稍后更改系统属性不会产生任何影响,因为该属性很早就被评估并缓存。但是jdic的家伙们发现了一种如何解决这个问题的方法。这有点肮脏 - 但是嘿,这些黑客是我们都喜欢Java的原因......

System.setProperty( "java.library.path", "/path/to/libs" );  
Field fieldSysPath = ClassLoader.class.getDeclaredField( "sys_paths" );  
fieldSysPath.setAccessible( true );  
fieldSysPath.set( null, null );  

解释

首先,系统属性将使用新值进行更新。这可能是一个相对路径 - 或者您可能希望动态创建该路径。

类装入器有一个包含路径的静态字段 ()。如果该字段设置为 null,则会自动初始化。因此,强制该字段为 null 将导致在调用后立即重新评估库路径...sys_pathsloadLibrary()


答案 2

不,你不能。此属性是只读值。您可以在 JVM 启动时通过以下方式更改它:

-Djava.library.path=your_path

如果要从特定位置加载库,则可以将 System.load(libraryPath) 与库的完整路径一起使用。


推荐