在 Eclispe RCP 应用程序中,有没有办法检查当前系统上是否有特定的本地库可用?
使用 System.loadLibrary("myLib"); 然后捕获 UnsatisfiedLinkError 会导致其他包无法使用该库,因为这会导致错误“库已由另一个类加载器加载”。
我在互联网上找到了解决这个问题的方法,它使用自定义类加载器,然后加载库,然后使用 System.gc() 对类加载器进行垃圾收集,这也将卸载库以便可以加载它再次被另一个捆绑。
不过也有缺点:
- 它需要大量的自定义代码
- 捕捉 UnsatfisfiedLinkError 有点吓人
- 假设 Bundle1 加载库以检查可用性。然后 Bundle1 卸载该库,而 Bundle2 加载该库以实际使用它。Bundle2 不会卸载库(因为没有理由这样做)。然后,Bundle1 再次要加载库以检查可用性。这又会导致 UnsatisfiedLinkError。