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