[JNA] Erreur lors du chargement de la librairie

Résolu
lac981 Messages postés 14 Date d'inscription jeudi 14 avril 2011 Statut Membre Dernière intervention 31 mai 2011 - 16 mai 2011 à 12:17
lac981 Messages postés 14 Date d'inscription jeudi 14 avril 2011 Statut Membre Dernière intervention 31 mai 2011 - 18 mai 2011 à 18:26
Bonjour,

Je post ici car j'ai un petit problème avec JNA (Java Native Access), après avoir suivis un tutoriel pour charger une librairie je suis arrivé à ces deux fichiers la :

import com.sun.jna.Library; 

public interface Lib extends Library
{

}


Que j'utilise ici

System.setProperty("jna.library.path", System.getProperty("user.dir")+File.separator+"dll");
System.out.println(System.getProperty("jna.library.path"));
Lib p = (Lib) Native.loadLibrary("hrmcom", Lib.class);


Comme vous le voyer j'ai essayé de modifier le jna.library.path, qui contient bien le chemin vers la dll, j'ai également ajouter le chemin vers la dll à la variable d'environnement PATH mais rien n'y fait je tombe toujours sur cette erreur :

Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: Unable to load library 'hrmcom': Le module spécifié est introuvable.

at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:163)
at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:236)
at com.sun.jna.Library$Handler.(Library.java:140)
at com.sun.jna.Native.loadLibrary(Native.java:379)
at com.sun.jna.Native.loadLibrary(Native.java:364)

Par contre si je mets ma DLL dans le dossier Windows\system32\ là ça veut bien charger la librairie.

Si vous avez déjà rencontré le problème ou si vous avez une idée de ce qui a pu se passer, j'attends vos réponses...

13 réponses

Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
18 mai 2011 à 00:20
Salut,


Bon bah je n'ai aucun pb de load sur mon pc de test...
config:
OS: Windows 7 64bits
JVM: build 1.6.0_24-b07 32bits

Projet:
Nom: plop
dedans il y a 3 répertoires et 2 fichiers:
- src avec dedans 1 classe et 1 interface:
import java.io.File;

import javax.swing.JOptionPane;

import com.sun.jna.Native;

public class Test {

public static void main(final String[] args) {
final StringBuilder message =  new StringBuilder();
System.setProperty("jna.library.path", System.getProperty("user.dir") + File.separator + "lib");
message.append("jna.library.path:").append(System.getProperty("jna.library.path"));

final Lib p = (Lib) Native.loadLibrary("hrmcom", Lib.class);
message.append("\nLib:").append(p);

JOptionPane.showMessageDialog(null, message.toString(), "Info",
JOptionPane.INFORMATION_MESSAGE);
}
}

import com.sun.jna.Library;

public interface Lib extends Library {

}


- bin avec dedans les classes compilées.
- lib avec dedans les jar jna + la dll
[list]
[*] jna.jar
[*] platform.jar
[*] hrmcom.dll
/list

- le jar de l'application qui se nomme plop.jar
- un fichier build.xml pour la compilation et la création du jar
<?xml version ="1.0" encoding="UTF-8"?>

<target name="build">
<delete file="plop.jar"/>
<javac classpath="bin;./lib/jna.jar:./lib/platform.jar" srcdir="src" destdir="bin" />
<jar jarfile="plop.jar" basedir="./bin">
<manifest>


</manifest>
</jar>
</target>






------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
3
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
18 mai 2011 à 16:31
Salut,

bah sous eclipse... clic droit sur le fichier build.xml et "Run As" -> "Ant build" ...
je ne sais pas pourquoi ça ne fonctionne pas chez toi... ta version de jvm ?
Le Windows 7 d'hier est un Windows 7 64bits classique... avec un jdk 6 32bits + eclipse 32bits...
Le Windows XP d'aujourd'hui est un XP pro fraîchement installé avec un jdk 6 32 bits + eclipse 32 bits (fraîchement installé aussi)...
Je viens également de faire le test sur le pc d'un collègue (Vista 32bits + jre 6 + le zip que je t'ai envoyé) et quand je double clic sur le jar j'ai bien le JOptionPane qui s'ouvre avec tout qui va bien dedans...



------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
3
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
16 mai 2011 à 23:53
Salut,


Tu as essayé (à la place de System.setProperty) de passer l'option au démarrage de la jvm ?
exemple:
java -Djna.library.path="/chemin/vers/la/lib" -jar ton_jar_de_ton_application.jar




------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
0
lac981 Messages postés 14 Date d'inscription jeudi 14 avril 2011 Statut Membre Dernière intervention 31 mai 2011 1
17 mai 2011 à 09:39
Bonjour,

Tout d'abord je te remercie pour ta réponse. J'ai essayé avec ta ligne de commande mais rien n'y fait.

Le probleme c'est que même en mettant ma DLL dans 'Windows\system32' il me sort toujours la même exception. J'ai fais pas mal de posts sur différents forums ou les personnes avaient le même problème que moi mais les manipulations recommandées non rien changer au problème.

D'ou ma question ma DLL est-elle bien compatible ? Comment le savoir ?

Vous pourrez trouver la DLL à cette adresse.

D'avance Merci.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
17 mai 2011 à 13:43
Salut,

Je ne pense pas que le pb soit dans la dll ici tu as une erreur de load... une petite question, ton OS est un OS 32bits ? ou 64bits ? dans le cas d'un OS 64 :
- La JVM est en 32 ou 64 (je sais même pas si la jvm 64 existe pour windows) ?
- Le LD PATH sous 64 est dans je sais plus quoi 64 et non dans system32

Sinon je regarderai sur un de mes PC windows ce soir pour voir.


------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
0
lac981 Messages postés 14 Date d'inscription jeudi 14 avril 2011 Statut Membre Dernière intervention 31 mai 2011 1
17 mai 2011 à 14:22
Bonjour,

C'est vrai qu'il est possible qu'il y est des interférences entre mon système 64 et la jvm. Pourtant pour voir comment fonctionnait JNA j'ai suivis un tuto ou il fallait chargé un fichier contenu dans system32 : msvcrt.dll, mais c'est vrai qu'il est aussi présent dans sysWOW64, après avoir vu ça j'ai mis ma dll dans ce dossier mais elle ne charge toujours pas.

En tout cas merci, j'attends ton message de ce soir.

A+
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
18 mai 2011 à 00:26
Re,

le choix du répertoire lib avec la dll et les jar dedans est volontaire, personnellement je ne supporte pas les applications qui vont installer je ne sais trop quoi pour pourrir un système... du coup je m'arrange toujours pour que les fichiers restent dans le répertoire de mon application.



------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
0
lac981 Messages postés 14 Date d'inscription jeudi 14 avril 2011 Statut Membre Dernière intervention 31 mai 2011 1
18 mai 2011 à 10:35
Bonjour,

Déjà merci beaucoup d'avoir pris le temps de me répondre et de faire ce test.
Alors là vraiment je ne comprends j'ai créé un nouveau projet, dans laquelle j'ai mis la même arborescence, avec le même contenu pour les fichiers mais lorsque que j’exécute mon jar j'ai toujours cette erreur, de plus Eclipse ne semble pas prendre en compte le fichier Build.xml. J'ai également fais ce projet avec NetBeans mais toujours le même problème. Si tu pouvais m'envoyer une archive de ton projet que je puisse voir comment il est fait en dernier recours. En tout cas je ne sais vraiment pas ce qui peut foirer.

Encore Merci.

A+
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
18 mai 2011 à 11:54
Salut,

ok, ok, déjà supprime les lib hrmcom de ton système, ensuite passe par ma bal CS pour m'envoyer ton adresse mail que je puisse te passer l'archive (pas avant ce soir par contre).

Au passage c'est pas Build.xml mais build.xml



------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
0
lac981 Messages postés 14 Date d'inscription jeudi 14 avril 2011 Statut Membre Dernière intervention 31 mai 2011 1
18 mai 2011 à 11:58
Re,

Oui je les avais supprimées.
Je t'ai envoyé mon adresse, merci.
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
18 mai 2011 à 14:47
Salut,

Je viens d'envoyer le projet sur ton mail.
Je l'ai également testé sous Windows XP en vmware




------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
0
lac981 Messages postés 14 Date d'inscription jeudi 14 avril 2011 Statut Membre Dernière intervention 31 mai 2011 1
18 mai 2011 à 15:55
Bonjour,

Aussi incroyable que ça puisse l'être ça ne fonctionne pas ni sur mon pc ni sur celui de mon collègue. Je ne vois pas d'ou viens le problème, comment génère tu ton jar ? en ligne de commande ? si oui laquelle ?

Encore Merci.

A+
0
lac981 Messages postés 14 Date d'inscription jeudi 14 avril 2011 Statut Membre Dernière intervention 31 mai 2011 1
18 mai 2011 à 18:26
Re,

Je te remercie infiniment, je ne compilais tout simplement pas comme cela.

Merci du temps que tu as pris pour m'aider.

Bonne continuation.

A+
0
Rejoignez-nous