java.lang.UnsatisfiedLinkError: Собственная библиотека {____. dll} уже загружена в другой загрузчик классов

StackOverflow https://stackoverflow.com/questions/1223518

Вопрос

Я использую собственный 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, не проверяя, доступен ли он уже.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top