java.lang.UnsatisfiedLinkError: la bibliothèque native {____. dll} est déjà chargée dans un autre chargeur de classe

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

Question

J'utilise mon propre fichier JAR, qui utilise une bibliothèque Java (JHDF5), qui utilise à son tour une dll via JNI. Lorsque j'utilise mon propre fichier JAR dans MATLAB, puis que je dois le reconstruire pendant le débogage, j'obtiens cette erreur lorsque je tente de l'utiliser à nouveau, après avoir appelé clear java et créé un nouvel objet à partir de mon JAR. fichier:

java.lang.UnsatisfiedLinkError: 
Native Library C:\deka\proj\java\ESPDF\dist\lib\jhdf5.dll 
already loaded in another classloader

et je ne peux pas le résoudre sans arrêter MATLAB et rouvrir, ce qui est douloureux pour le cou.

Quelle est cette erreur et à qui la faute? (le mien? MATLAB's? JHDF5 pour ne pas libérer la DLL ou vérifier si elle est déjà chargée)

Était-ce utile?

La solution

En général, le code Java ne permet pas de décharger une dll native. http://bugs.sun.com/bugdatabase/view_bug.do?bug_id= 5075039

Étant donné qu'une dll est chargée, elle est là pour la durée de vie de la machine virtuelle Java et la machine virtuelle s'assurera qu'elle ne soit chargée qu'une seule fois.

Pour répondre à la question du blâme, je suppose que c’est la faute du code qui tente de charger la dll sans vérifier si elle est déjà disponible.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top