在Java项目中,我正在使用第三方库,该第三方库通过
System.loadLibrary("libName");
我希望能够从我的应用程序中影响此方法的搜索路径,以便用户无需在命令行上指定正确的java.library.path值(此值取决于当前操作系统)和建筑)。例如在Windows上,我想将其设置为“ lib / native / windows”,在Linux 32bit上,将其设置为“ lib / native / linux32”等。
我试过了
System.setProperty("java.library.path", ...)
但这被忽略了,这显然是因为JVM在我的代码运行之前仅读取了此属性一次。
我还尝试在使用依赖于它的Java库之前加载本机libray
System.load("fullPath/lib")
此调用成功,但是当使用System.loadLibrary()再次加载本机库时,仍然会出现UnsatisfiedLinkError。
我发现的唯一方法是:
这行得通,但是我发现它非常复杂并且需要很多努力,因为我需要添加所有这些接口。有没有更简单的方法?
根据您上面的评论(尤其是第三方库的行为),我想说,最好的选择是在启动JVM时正确获取库路径。
请注意,有一种更改库路径的简便方法,但是它涉及讨厌的反射,并且据说不适用于所有Java版本。当然,它依赖于未记录的私有实现细节,ClassLoader该细节_可能_ 会从一个版本更改为另一个版本。
ClassLoader