2010-08-11 6 views
0

Je lie une bibliothèque C++ native dans mon application Java en utilisant JNI. J'ai chargé ma bibliothèque using System.loadLibrary() et tout semble fonctionner. J'ai ajouté la fonctionnalité à ma DLL C++ qui effectue maintenant des appels dans plusieurs autres DLL à partir de systèmes logiciels tiers. Malheureusement, l'une de ces DLL est nommée ZIP.dll. L'opération java loadLibrary trouve cette DLL dépendante dans/jre/bin avant de chercher dans le répertoire de mon projet, elle essaye donc d'utiliser celle-ci. Les deux dll ne sont pas identiques donc j'obtiens un UnsatisfiedLinkError en disant que la procédure spécifiée n'a pas pu être trouvée.JNI - System.LoadLibrary() trouve une DLL dépendant incorrecte

Existe-t-il un moyen de dire à java où chercher les bibliothèques dépendantes lors du chargement d'une DLL?

Répondre

2

Je crois que System.load avec le nom de chemin d'accès complet plutôt que System.loadLibrary devrait faire l'affaire.

+0

Ma bibliothèque dépend d'une bibliothèque secondaire nommée zip.dll. System.load me permet seulement de spécifier le chemin vers ma librairie ... à partir de là, java va chercher toutes les librairies dépendantes et trouve la mauvaise. J'ai besoin d'un moyen de spécifier le chemin d'accès aux bibliothèques dépendantes ... – Kyle

+0

System.load sur 'zip.dll' puis System.load sur votre bibliothèque? – KitsuneYMG

0

Je ne pense pas qu'il soit possible de charger deux DLL différentes avec le même nom en même temps. Vous pouvez soit changer l'ordre sur le chemin afin que le ZIP.dll correct est chargé en premier (cela peut alors causer des problèmes avec le jvm) ou vous pouvez renommer votre fichier ZIP.dll à quelque chose d'autre. Renommer votre ZIP.dll est probablement le moyen le plus facile à faire.

Questions connexes