2009-08-30 6 views
0

Ce problème m'embête vraiment et j'espère que quelqu'un pourrait m'aider. J'ai écrit des bibliothèques de plugins pour un grand logiciel Java. Tout fonctionne bien et bien sur mon ordinateur de développement. Cependant, après avoir compilé et enveloppé le logiciel dans Nullsoft Installer et l'installer sur un autre ordinateur, tout sauf les plugins dll natifs que j'ai développés s'exécute, et j'obtiens un UnsatisfiedLinkError quand j'appelle System.loadLibrary. Le programme d'installation fonctionne sur mon ordinateur de développement, le logiciel installé fonctionne bien même après avoir déplacé le logiciel d'origine. Voici ce que je sais:Java LoadLibrary UnsatisfiedLinkError, bien que Java puisse voir le fichier et tourne sur un autre ordinateur

  • les bibliothèques natives sont deved dans .NET (C++/CLI) accroché dans par JNI

  • Le logiciel sur le nouvel ordinateur charge le chemin de la bibliothèque à droite, peut voir les DLLs natives. En Java, j'ai ajouté un segment pour vérifier les permissions sur les fichiers en utilisant la classe File, Java fonctionne bien sur library_dll.canRead() et library_dll.canWrite(), mais se bloque/se bloque sur library_dll.canExecute().

Si quelqu'un peut m'aider, je l'aurais vraiment apprécié !!! Merci à tous!

+0

Le message/la pile inclus avec UnsatisfiedLinkError sera critique dans la détermination du problème. Les réponses ne peuvent que spéculer jusqu'à ce que vous l'incluiez. –

+0

Spécifiez-vous -Djava.library.path lorsque vous exécutez le programme? –

Répondre

0

L'ordinateur cible a-t-il installé .NET et la bonne version de .NET?

Je ne peux pas dire que j'ai déjà fait un .NET/JNI interop - cela me semble potentiellement difficile. Avez-vous regardé en utilisant JNBridge pour rendre les choses plus faciles?

0

Merci Jon! Non, l'ordinateur cible n'a pas .NET installé (au moins rien d'autre que ceux que les fenêtres ont par défaut). Mais il semble que JAVA/JNI ne peut même pas charger la DLL ... Je vais essayer d'installer le framework .NET et voir

.NET/JNI interop n'a pas été la partie difficile, qui fonctionne sur mon comp .. C'était difficile mais pas trop difficile.

0

Je suggère que vous exécutez FileMon sur l'ordinateur qui pose le problème, puis essayez d'exécuter votre application. Après FileMon captures de données, vous devriez voir tous les accès aux fichiers effectués par votre application Java et voir l'échec exact qui conduit à l'erreur UnsatisfiedLink. Par exemple, il se peut qu'une dépendance de votre DLL JNI soit manquante sur l'autre ordinateur (cela semble être une bonne possibilité, après des erreurs de sécurité/permission).