Essayez d'utiliser DLL à partir de Java (la "JNA"). Impossible de charger l'exception de la bibliothèque
J'ai projet NetBeans de tutoriel qui provoque une exception:
Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library
'simpleDLL': Le module spécifié est introuvable.
Essayé de mettre simpleDLL.dll dans les bibliothèques de projet, le fichier copié dans le dossier system32, sans succès.
Veuillez vérifier si le simpleDLL est 32 ou 64 bits. Ensuite, vérifiez si la JVM est également 32 ou 64 bits. Ils doivent être de la même plate-forme.
Essayé avec une autre dll et de la JNI. Il semble qu'il fonctionne
Essayé avec une autre dll et de la JNI. Il semble qu'il fonctionne
OriginalL'auteur Karloss | 2013-01-11
Vous devez vous connecter pour publier un commentaire.
J'ai eu exactement le même problème avec le chargement d'une DLL, je l'ai résolu de cette façon:
Si la DLL est compatible, alors le problème peut être dans votre bibliothèque java chemin. J'ai mis ma DLL dans le
user.dir
répertoire et ensuite, j'ai utilisé ce code:Jeu Java chemin de la bibliothèque de
user.dir
ou peut-être un autre chemin que vous voulez:De charger la bibliothèque:
Système.loadLibrary("libraryWithoutDLLExtension");
Il a travaillé pour moi, l'essayer et me dire si cela fonctionne pour vous.
public static void main(String[] args) {
. Ma bibliothèque est située à l'utilisateur.dir. Même résultat - exceptionException in thread "main" java.lang.UnsatisfiedLinkError: C:\Windows\System32\simpleDLL.dll: Can't find dependent libraries
Il n'est pas dans votre compte utilisateur.dir, de l'utilisateur.dir est le chemin dans lequel le programme java est situé, à moins que vous avez localisée dans C:\Windows\System32\ vous n'avez pas votre dll dans de l'utilisateur.dir
J'ai essayé de commenter tous les "grands" de code et de le remplacer avec:
System.loadLibrary("simpleDLL");
Et il dit:Exception in thread "main" java.lang.UnsatisfiedLinkError: Can't load IA 32-bit .dll on a AMD 64-bit platform
Cela signifie que la dll a été trouvé mais il ne peut pas être chargé car j'ai une machine x64, il ne fonctionne pas avec l'exemple du site lié, mais avec le Système.loadLibrary il fonctionne. Je vous suggère d'essayer la mise en œuvre d'une DLL avec JNI au lieu de la JNA, j'ai toujours travaillé avec JNI et n'ai pas de problèmes avec DLL de liaisonAussi, sur l'autre non, cela ne fonctionne pas pour moi. J'ai suivi toutes les étapes et j'ai également ajouté des
System.setProperty("jna.library.path", dir);
. Ledir
est le chemin d'accès absolu (D:\programs\...
). Il y a un autre problème qui peut se produire.OriginalL'auteur BackSlash
Veuillez vérifier si le simpleDLL est 32 ou 64 bits. Ensuite, vérifiez si la JVM est également 32 ou 64 bits. Ils doivent être de la même plate-forme.
Vous pouvez également spécifier un chemin absolu, si vous modifiez
loadLibrary()
àload()
:http://www.chilkatsoft.com/p/p_499.asp
Essayé avec le chemin absolu avec les mêmes résultats
OriginalL'auteur Christian Kuetbach
Je pouvais ne fonctionne qu'en 32 bits (Xp).
Placer la DLL dans le dossier "c:\Windows\System32"
Si l'erreur java.lang.UnsatisfiedLinkError: Impossible de charger la bibliothèque" persiste, utilisez Dependency Walker pour afficher la Dll dépendantes.
Dependency Walker
OriginalL'auteur Maurício
Trois raisons possibles pour ce problème, si le fichier dll n'est pas rompu:
32 bits 64 bits de Compatibilité. 32 bits dll ne peut être en cours d'exécution sur un 32 bits jdk ou jre.
Par l'utilisation de Cygwin commande
file <filename>
on peut savoir si une dll est 32 bits ou 64 bits.la dll n'est pas lacated dans le droit chemin, de sorte que java ne peut pas le localiser. De manière générale, nous pouvons utiliser certaines absolut chemin autre que
System32
pour s'assurer que la voie est droite.la dll que nous sommes le chargement nécessite d'autres dll.
Comment pouvons-nous nous occupons de la 3ème possibilité:
utilisant JNI du
System.loadLibrary()
mthod peut me donner plus d'indication, en comparaison avec la JNA. Il peut dit quelque chose comme:Exception in thread "main" java.lang.UnsatisfiedLinkError: MyLibrary.dll: Can't find dependent libraries.
Cela signifie que des bibliothèques
MyLibrary.dll
dépend est manquant. En utilisant dependency walker nous pouvons dire que dll sont nécessaires.En chargeant ces dll avant de la dll que nous voulons charger, nous pouvons résoudre ce problème.
OriginalL'auteur ZhaoGang