java.lang.UnsatisfiedLinkError: {. ____ dll} Native Biblioteca já carregado em outro carregador de classe

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

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)

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top