OVH Cloud OVH Cloud

java.lang.UnsatisfiedLinkError...

6 réponses
Avatar
Cyrille Proust
Bonjour,

J'ai encapsulé l'utilisation d'une dll maison dans une classe qui
contient des méthodes natives.

Après avoir mis ma dll (pour mes méthodes natives) et la dll XX celle
pour qui j'ai du faire du natif) dans le répertoire courant (".") voici
l'erreur donnée par la JVM :

java.lang.UnsatisfiedLinkError: Nome de la dll XX.dll
at package.NomclasseXX.Methode(Native Method)

D'ou peut venir le problème ?

Merci,

Cyrille Proust

6 réponses

Avatar
Johann Burkard
Cyrille Proust wrote:
java.lang.UnsatisfiedLinkError: Nome de la dll XX.dll
at package.NomclasseXX.Methode(Native Method)

D'ou peut venir le problème ?


- Tu as oublié d'écrire Runtime.getRuntime().loadLibrary("xx")
- Si la dll es dans le répertoire courant, essaie
Runtime.getRuntime().load("xx.dll") ou bien NativeLoader [1].
- Il te faut appeller Java avec -Djava.library.path=.
- Les noms des exports sont differents. Chez moi, l'export s'appelle
, par exemple.

[1]
<http://cvs.sourceforge.net/viewcvs.py/stringsearch/stringsearch/src/com/eaio/util/lang/NativeLoader.java?view=markup>

Johann
--

This signature served by .siGenerator. 1.0 (<http://johannburkard.de>)

Avatar
Cyrille Proust
Merci pour le coup de main :-)

Le probleme n'est pas de charger la librairie native Nat.dll ; l'erreur
survient lorsque cette librarie native Nat.dll décide d'utiliser la
librairie XX.dll.
J'ai une dll, XX.dll, écrite en C++ et j'ai créé une class Nat avec des
méthodes native JNI liées à Nat.dll, qui utilise cette librarie et c'est
lorsque que Nat.dll essaye de charger l'autre dll qu j'ai un problème de
lien...
//
Class Nat {

public native String test(params...);
static
{
System.loadLibrary("Nat");
//Runtime.getRuntime().load("Nat.dll");
}
}
Nat.dll définit la méthode test mais test utilise une dll nommée XX.dll
et c'est cette librairie qui créé java.lang.UnsatisfiedLinkError

Si je retire XX.dll, j'ai une erreur du type "Ne peut pas trouver la
librairie XX.dll ;
Si je la laisse, j'ai le message d'erreur voir ci dessous.
//

Merci,

Cyrille

Cyrille Proust wrote:

java.lang.UnsatisfiedLinkError: Nome de la dll XX.dll
at package.NomclasseXX.Methode(Native Method)

D'ou peut venir le problème ?



- Tu as oublié d'écrire Runtime.getRuntime().loadLibrary("xx")
- Si la dll es dans le répertoire courant, essaie
Runtime.getRuntime().load("xx.dll") ou bien NativeLoader [1].
- Il te faut appeller Java avec -Djava.library.path=.
- Les noms des exports sont differents. Chez moi, l'export s'appelle
, par exemple.

[1]
<http://cvs.sourceforge.net/viewcvs.py/stringsearch/stringsearch/src/com/eaio/util/lang/NativeLoader.java?view=markup>

Johann



Avatar
Johann Burkard
Cyrille Proust wrote:
Le probleme n'est pas de charger la librairie native Nat.dll ; l'erreur
survient lorsque cette librarie native Nat.dll décide d'utiliser la
librairie XX.dll.


Et comment tu l'as fait dans Nat.dll d'appeller les exports de XX.dll?
Avec LoadLibrary?

Johann
--
Jeep, thx.
(*Tönnes in <aic1rq$h78$)

Avatar
Cyrille Proust
Bonjour,

Cyrille Proust wrote:

Le probleme n'est pas de charger la librairie native Nat.dll ; l'erreur
survient lorsque cette librarie native Nat.dll décide d'utiliser la
librairie XX.dll.



Et comment tu l'as fait dans Nat.dll d'appeller les exports de XX.dll?
Avec LoadLibrary?


Non je n'utilise pas LoadLibrary, je lie avec XX.lib et j'appelle les
fonction de XX.dll directement ; c'est pourquoi je pensais que mettre
les 2 dll au même endroit suffisait (Nat.dll et XX.dll).
Manifestement non.


Johann


Merci,

Cyrille


Avatar
Johann Burkard
Cyrille Proust wrote:
Et comment tu l'as fait dans Nat.dll d'appeller les exports de XX.dll?
Avec LoadLibrary?


Non je n'utilise pas LoadLibrary, je lie avec XX.lib et j'appelle les
fonction de XX.dll directement ; c'est pourquoi je pensais que mettre
les 2 dll au même endroit suffisait (Nat.dll et XX.dll).


Hm. Peut-être tu trouves une meilleure réponse sur
<http://msdn.microsoft.com> ou dans les newsgroups Microsoft.

A propos: As-tu essayé d'appeller Runtime#loadLibrary avec les deux dll?

Johann
--
19:41 .gra0.: findest du es unmoralisch, meine miesen performances
künstlich aufzubessern?
19:41 Michael: nein, ich finde es unumgänglich


Avatar
Cyrille Proust
Désolé,

En fait, c'était un problème avec mon projet VC++6.0 qui ne créait pas
une "bonne" dll...

Merci pour tout,

Cyrille Proust

Cyrille Proust wrote:


Et comment tu l'as fait dans Nat.dll d'appeller les exports de XX.dll?
Avec LoadLibrary?


Non je n'utilise pas LoadLibrary, je lie avec XX.lib et j'appelle les
fonction de XX.dll directement ; c'est pourquoi je pensais que mettre
les 2 dll au même endroit suffisait (Nat.dll et XX.dll).



Hm. Peut-être tu trouves une meilleure réponse sur
<http://msdn.microsoft.com> ou dans les newsgroups Microsoft.

A propos: As-tu essayé d'appeller Runtime#loadLibrary avec les deux dll?

Johann