Comment faire pour résoudre un UnsatisfiedLinkError (ne Peut pas trouver de bibliothèques dépendantes) dans un JNI projet

Je suis en train de travailler sur un projet en Java qui utilise la JNI. La JNI appelle une bibliothèque personnalisée que j'ai écrit moi-même, disons mylib.dll, et qui dépend de la 3e partie de la bibliothèque, libsndfile-1.dll.

Quand je lance mon programme il plante avec

java.lang.UnsatisfiedLinkError:  C:\...path...\mylib.dll: Can't find dependent libraries.

J'ai cherché sur ce site (et d'autres) et j'en ai essayé un certain nombre de corrections:

  1. J'ai couru dependency walker. DW a donné un couple de mises en garde -- que deux bibliothèques requises par libsndfile, MPR.DLL et SHLWAPI.DLL, avait "en suspens importations" -- mais le DW FAQ dit que ces avertissements peut être ignoré en toute sécurité.

  2. J'ai corrigé les noms de méthode dans mylib.dll comme l'a suggéré ici. La méthode noms avaient, en quelque sorte obtenu mutilé par le compilateur, mais j'ai ajouté de l'éditeur de liens et de drapeaux, la méthode dll, les noms correspondent à ceux de mon jni fichier d'en-tête exactement.

  3. J'ai mis toutes ces Dll dans le même répertoire -- le même répertoire que le .jar qui les appelle, pour s'assurer qu'ils sont sur le droit CHEMIN.

Pas de dés.

Quelqu'un a une idée de ce qui se passe?

Je suis en train de faire mon développement dans Visual Studio 2010 sur un MacBook pro (via Parallels). Je suis en train de faire mes tests sous Windows XP sur un portable toshiba.

  • avez-vous mis -Djava.de la bibliothèque.chemin d'accès ?
  • Je n'ai pas, en fait, parce que je ne suis pas à lancer le programme depuis la ligne de commande. Je suis en train d'écrire une bibliothèque pour le Traitement de (processing.org), et le Traitement est responsable pour le lancement de mon code. J'ai vérifié la bibliothèque java chemin d'accès lors de l'exécution, cependant, et le dossier contenant mes Dll qui est sur elle.
  • Comme je l'ai dit, toutes les Dll dans le même dossier, à côté de mon .fichier jar. Donc, je ne pense pas que le problème est qu'ils ne sont pas sur le chemin. Mais merci quand même.
  • Sur Windows, nous avons eu à mettre .les fichiers dll dans le [JRE]\bin (même lieu où java.exe, etc. sont) pour obtenir Java pour les voir automatiquement sans avoir à nettoyer avec des options de ligne de commande ou des variables d'environnement.
  • Hmm... ok, j'ai essayé de mettre toutes mes .dll dans [JRE]\bin. Cela fonctionne!
  • Voir où . est dans votre PATH, par rapport à d'autres répertoires (JRE, Windows, etc...). L'une des premières entrées pourraient fournir une version d'une bibliothèque qui est incompatible avec celles que vous essayez de charger à partir du répertoire courant. Le déplacement . de loin mon CHEMIN a fait l'affaire pour moi, et m'a sauvé d'avoir à polluer l'environnement JRE répertoire avec mes bibliothèques.

InformationsquelleAutor dB' | 2011-05-23