Есть ли в приложении Eclispe RCP способ проверить, доступна ли конкретная собственная библиотека в текущей системе?
Использование System.loadLibrary("myLib"); а затем перехват UnsatisfiedLinkError приводит к тому, что другие пакеты не могут использовать библиотеку, так как это приведет к ошибке «Библиотека уже загружена другим загрузчиком классов».
Я нашел решение этой проблемы в Интернете, в котором используется пользовательский загрузчик классов, который затем загружает библиотеку, а затем загрузчик классов собирает мусор с помощью System.gc(), который также выгружает библиотеку, чтобы ее можно было загрузить. снова другой связкой.
Однако есть недостатки:
- Требуется много пользовательского кода
- Поймать UnsatfisfiedLinkError несколько страшно
- Скажем, Bundle1 загружает библиотеку для проверки доступности. Затем Bundle1 выгружает библиотеку, а Bundle2 загружает библиотеку, чтобы фактически использовать ее. Bundle2 не выгружает библиотеку (поскольку для этого нет причин). Затем Bundle1 снова хочет загрузить библиотеку для проверки доступности. Это снова приведет к ошибке UnsatisfiedLinkError.