JNI Can't find dependent libraries

JNI Can't find dependent libraries - Java - Programmation

Marsh Posté le 23-10-2004 à 01:30:35    

Bonjour,
Je suis en train d'utiliser JNI et j'ai un probleme de dépendance que je n'arrive pas a résoudre. La dll que j'ai crée utilse jawt.h. J'ai reussi à la compiler, mais quand j'utilise la classe java qui se sert de cette librairie, j'ai le message suivant :

this application has failed to start because jawt.dll was not found...


J'ai essayé de mettre jawt.dll dans le path (

-Djava.library.path="D:\j2sdk1.4.1_02\jre\bin";"F:\Program Files\eclipse 3.1M1\workspace\CFileClignotement\Debug"

) comme j'avais fait pour qu'il trouve la dll (JNI) de base, mais j'ai toujours la même erreur...
Je sais pas trop comment faire pour indiqué ou elle se trouve, j'ai essayé d'ajouter le repertoire dans le classpath aussi, mais toujours la même erreur...

Reply

Marsh Posté le 23-10-2004 à 01:30:35   

Reply

Marsh Posté le 31-10-2004 à 20:09:52    

Ben en fait j'utilisé le java du sdk, alors qu'avec le java du JRE tout marche :)

Reply

Marsh Posté le 10-12-2005 à 22:00:47    

Bon ce thread a plus d'un an mais comme je suis tombé dessus parce que j'avais un un problème dans le genre, je vais expliquer comment je m'en suis sorti :  
 
Le message n'est pas correct : "jawt.dll n'est pas trouvée" est illogique, car la JRE, à priori, comporte bien cette DLL (!). Mais en réalité c'est le link vers la lib native jawt.dll qui manque, autrement dit, on a fait un appel à une méthode native de jawt.dll alors qu'elle n'a encore jamais été chargée par la JVM.
 
Comment c'est possible ? Le plus naturellement du monde : jawt.dll n'est chargée par une JVM du SDK qu'en cas de besoin. D'habitude on fait des appels à jawt à travers des Frame, Dialog, Window, qui appellent des classes qui chargent pour vous jawt.dll à la première occasion. C'est transparent. Sauf que là je parierais que patachou a essayé de faire des bidouilles GUI un peu exotiques et appelle ses fonctions avant d'avoir appelé quoi que ce soit d'awt.
 
Solution : simplement faire un System.loadLibrary("jawt" ); juste avant le System.loadLibrary("patachou" );
 
Le fait que ça marche dans la JRE en revanche, c'est un coup de chance dû à une différence de comportement entre JDK et JRE.


Message édité par marsf le 10-12-2005 à 22:03:33
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed