java.lang.UnsatisfiedLinkError: Собственная библиотека {____. dll} уже загружена в другой загрузчик классов
-
11-07-2019 - |
Вопрос
Я использую собственный JAR-файл, который использует библиотеку Java (JHDF5), которая, в свою очередь, использует dll через JNI. Когда я использую свой собственный JAR-файл в MATLAB, а затем приходится перестраивать его во время отладки, я получаю эту ошибку, когда пытаюсь использовать его снова, после вызова clear java
и создания нового объекта из моего JAR файл:
java.lang.UnsatisfiedLinkError:
Native Library C:\deka\proj\java\ESPDF\dist\lib\jhdf5.dll
already loaded in another classloader
и я не могу решить эту проблему, не закрыв MATLAB и не открывая снова, что является болью в шее.
Что это за ошибка и чья это вина? (мой? MATLAB's? JHDF5 за то, что он не освобождает DLL или не проверяет, загружена ли она уже)
Решение
В общем случае для кода Java нет способа выгрузить нативную DLL. http://bugs.sun.com/bugdatabase/view_bug.do?bug_id= 5075039 р>
Учитывая, что после загрузки dll она существует в течение всего срока службы JVM, а виртуальная машина гарантирует, что она загружается один и только один раз.
Чтобы ответить на вопрос о вине, я полагаю, что это ошибка кода, который пытается загрузить dll, не проверяя, доступен ли он уже.