Insatisfait Lien d'Erreur lors de l'utilisation du Système.loadLibrary()?
Pour une raison quelconque, je suis un satanés Insatisfaits Erreur de Lien dans mon application java.
C'est le délinquant en question:
System.loadLibrary("psjw");
En dépit de la bibliothèque psjw.dll clairement, étant dans le même paquet source car cette classe.
S'il vous plaît aider.
Vous pourriez envisager d'utiliser le Système.load(). Il prend le chemin d'accès complet, et ignore toutes les variables de l'environnement. C'est juste:
Merci pour ce commentaire, très bon pour trouver la cause racine du problème d'une bibliothèque
System.load("C:\\Program Files\\My Great Program\\libs\\psjw.dll");
Notez que vous pouvez créer la chaîne de caractères contenant le chemin d'accès au moment de l'exécution, de sorte que vous pouvez interroger d'abord pour des choses comme le répertoire de l'utilisateur, le répertoire dans lequel le programme est installé, et ainsi de suite. Ce serait peut-être préférable de la fonction loadLibrary(), puisque vous ne savez jamais si quelque chose sur la liste de sites de recherches a déjà le nom de "psjw.dll" qui pourrait en fin de chargement d'une bibliothèque que vous ne connaissait pas.Merci pour ce commentaire, très bon pour trouver la cause racine du problème d'une bibliothèque
OriginalL'auteur Aaron Hammond | 2010-06-18
Vous devez vous connecter pour publier un commentaire.
Assurez-vous que le psjw.dll est sur votre CHEMIN ou java.de la bibliothèque.chemin d'accès.
Ex: psjw.dll peut-être dans /usr/lib puis votre commande serait
java -Djava.de la bibliothèque.path=/usr/lib ur.package.UrClass
Tester votre configuration à l'aide d'une dépouillé de classe:
La DLL doit être dans le CHEMIN d'accès du processus d'essayer de charger la DLL en mémoire. Java utilise le CLASSPATH pour trouver des cours. Le système d'exploitation du loader utilise le CHEMIN (dans Windows) pour trouver les Dll que vous essayez de charger dynamiquement.
Comme Brian dit, il y a deux choses différentes à l'œuvre ici. CLASSPATH est complètement séparée de la VOIE ou de java.de la bibliothèque.chemin d'accès. CLASSPATH points à bocaux/classes, CHEMIN d'accès ou java.de la bibliothèque.chemin d'accès lieux des fichiers exécutables, dll.
Oui, et le CHEMIN d'accès à mon système est configuré pour un dossier dans mes documents. La DLL est dans le dossier. Encore l'exception.
Besoin de l'exception exacte alors qu'il y a plusieurs types de Insatisfaits des Erreurs de Lien.
OriginalL'auteur DeezCashews
Essayez de définir explicitement le chemin de la bibliothèque lors du démarrage de la JVM:
-Djava.library.path="Directory of DLL"
OriginalL'auteur Petar Minchev
Pour corriger de recherche de la bibliothèque (à partir de java.de la bibliothèque.chemin) pour les différents OS doivent avoir des noms différents:
Que vous pouvez appeler à partir de Java:
OriginalL'auteur Alexander C.
Ce que je peux dire de mon expérience, c'est que, si le loadLib(libraryName) est effectué à partir d'initialisation statique bloc dans le fichier de classe java, le libraray devrait être existe en java.de la bibliothèque.chemin d'accès. Sinon classe ne peut pas être chargé. Mais si nous allons de l'appel de loadLibrary() à titre d'autres méthodes d'e.g Main(), il peut être lu à partir de l'environnement path.
OriginalL'auteur Jaydhar
J'ai travaillé sur ce même problème depuis deux jours, mais j'ai finalement trouvé la réponse. J'ai d'abord créé un répertoire pour les bibliothèques, et de définir la variable d'environnement PATH vers le répertoire. Je n'aime pas encombrer mon chemin, donc maintenant je vous donne ce que j'ai trouvé à http://blog.cedarsoft.com/2010/11/setting-java-library-path-programmatically/. Mon interprétation suit
Pour le code ci-dessus, votre fichier dll dans le même dossier que votre .java. Si vous êtes en cours d'exécution en ligne de commande, n'oubliez pas de vous appeler à partir du même répertoire pour javac, et la racine du répertoire du package java à l'appel. Ainsi, pour la .java C:\workspace\yourpackage\YourClass.java, vous appeler en ligne de commande :
OriginalL'auteur Funmungus