java loadlibrary 路径_如何通过Java代码影响System.loadLibrary()的搜索路径?

在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。

我发现的唯一方法是:

添加抽象外部库的整个API的接口。

在其余的代码中仅使用这些接口。

添加实现接口并委托给库的类。

编写自己的ClassLoader, 覆盖findLibary(),以便在正确的路径中找到本机库

覆盖loadClass()并单独加载外部库和包装器层的所有类,而不是像默认的ClassLoader那样尝试委托给其父类

确保使用普通的ClassLoader加载接口,并且包装类和外部库使用我自己的ClassLoader加载。

这行得通,但是我发现它非常复杂并且需要很多努力,因为我需要添加所有这些接口。有没有更简单的方法?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值