java.lang.UnsatisfiedLinkError: {. ____ dll} Native Biblioteca já carregado em outro carregador de classe
-
11-07-2019 - |
Pergunta
Eu estou usando um arquivo JAR da minha própria, que usa uma biblioteca Java (JHDF5), que por sua vez usa uma dll através de JNI. Quando eu uso o meu próprio arquivo JAR no MATLAB, e depois ter de reconstruí-lo durante a depuração, eu recebo este erro quando eu tento usá-lo novamente, depois de chamar clear java
e criando um novo objeto do meu arquivo JAR:
java.lang.UnsatisfiedLinkError:
Native Library C:\deka\proj\java\ESPDF\dist\lib\jhdf5.dll
already loaded in another classloader
e eu não pode resolvê-lo sem desligar MATLAB e reabertura, que é uma dor no pescoço.
O que é esse erro e quem é a culpa? (Minha? MATLAB de? JHDF5 por não libertar a DLL ou a verificação para ver se ele já está carregado)
Solução
Em geral, não há nenhuma maneira para o código Java para descarregar a dll nativa. http://bugs.sun.com/bugdatabase/view_bug.do?bug_id= 5075039
Tendo em conta que, uma vez que uma DLL é carregada, ele está lá para o tempo de vida da JVM eo VM irá garantir que ele é carregado uma vez e apenas uma vez.
Para responder à questão da culpa, eu acho que é culpa do código que tenta carregar a dll sem verificar se o seu já está disponível.