Rendre accessible à la JVM une librairie dynamique sous Linux

Rendre accessible à la JVM une librairie dynamique sous Linux - Java - Programmation

Marsh Posté le 17-10-2003 à 15:03:30    

Je fais mes premiers pas sur linux (redhat), et j'arrive pas à utiliser une librairie dynamique C++ (via JNI). La JVM ne trouve pas la librairie en question ("no MyLibrary in java.library.path" ).
Sosu windows on ajoute à la variable d'environnement "PATH" le chemin du répertoire contenant la dll à charger, mais, ss linux, ça se passe comment ?

Reply

Marsh Posté le 17-10-2003 à 15:03:30   

Reply

Marsh Posté le 17-10-2003 à 15:13:50    

J'ai essayé ça :
http://forum.hardware.fr/forum2.ph [...] ubcat=#bas
Mais ça n'a pas l'air de marcher! :-( (même message)

Reply

Marsh Posté le 17-10-2003 à 15:27:19    

Y a pas un répertoire exprès pour les bibliothéques dynamiques sous linux? Si non y a aussi une variable d'environement PATH sous linux, ajoutes y l'enplacement de tas bibliothéque.


Message édité par LetoII le 17-10-2003 à 15:27:30

---------------
Le Tyran
Reply

Marsh Posté le 17-10-2003 à 15:31:16    

Ui pis quand tu lances ton prog, tu peux ajouter une propriété, hein. Genre : java -Djava.library.path=/joulipath MonSuperProg


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 17-10-2003 à 15:32:42    

LetoII a écrit :

Y a pas un répertoire exprès pour les bibliothéques dynamiques sous linux? Si non y a aussi une variable d'environement PATH sous linux, ajoutes y l'enplacement de tas bibliothéque.


 
Mais j'connais absolument rien à Linux moi. Elle est ou cette variable d'environnement ? Et je l'édite comment ?

Reply

Marsh Posté le 17-10-2003 à 15:33:45    

Taiche a écrit :

Ui pis quand tu lances ton prog, tu peux ajouter une propriété, hein. Genre : java -Djava.library.path=/joulipath MonSuperProg


 
ha ouais, pas con ça. Mais c'est une webapp, j'passe par tomcat. Jusqu'a maintenant j'ai pas mis le nez dans le script de démarrage.

Reply

Marsh Posté le 17-10-2003 à 15:34:05    

PATH=$PATH:mon chemin qui va bien
export PATH


---------------
Le Tyran
Reply

Marsh Posté le 17-10-2003 à 15:35:25    

El_gringo a écrit :


ha ouais, pas con ça. Mais c'est une webapp, j'passe par tomcat. Jusqu'a maintenant j'ai pas mis le nez dans le script de démarrage.


Ah OK. J'connais pas Tomcat mais j'suppose qu'il y a moyen de spécifier des arguments à la JVM (comme la taille max du heap, etc...) donc mate de ce côté-là, t'y trouveras peut-être ton bonheur.


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 17-10-2003 à 15:36:11    

Taiche a écrit :


Ah OK. J'connais pas Tomcat mais j'suppose qu'il y a moyen de spécifier des arguments à la JVM (comme la taille max du heap, etc...) donc mate de ce côté-là, t'y trouveras peut-être ton bonheur.


 
bien sur qu'il y a moyen. Reste à trouver le script de démarrage qui lance la JVM...

Reply

Marsh Posté le 17-10-2003 à 16:39:04    

Je suis en train de devenir fou !!!!
J'ai essayé des tas de trucs, rien ne marche.
J'ai essayé :  
modifier la variable d'environnement LD_LIBRARY_PATH (commande : env LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/monpath)
modifier cette même variable, mais dans la cadre de tomcat seulement.
modifier l'appel de la JVM qui fait tourner tomcat pour y ajouter -Djava.library.path=/joulipath
-> Dans ma servlet, quand une lib est pas trouvée, je liste le contenu de java.library.path. Résultat : dans tous ces cas, les chemins sont toujours les mêmes (3 chemins seulement, tous liés au SDK utilisé).
Mais c'est pas tout. J'ai essayé de coller ma lib dans un des ces 3 chemins. Il ne la trouve pas non plus !!!!!
 
Pour compiler ma dll, j'ai fait :
$ gcc -fPIC -c *.c
$ gcc -shared -Wl,-soname,libfoo.so.1 -o libfoo.so.1.0 *.o
$ ln -s libfoo.so.1.0 libfoo.so.1
$ ln -s libfoo.so.1 libfoo.so
 
C'est bon ?
 
Aidez moi s'y vous plait, j'ai bientôt plus de cheveux, et je risque d'arracher n'importe quoi!

Reply

Marsh Posté le 17-10-2003 à 16:39:04   

Reply

Marsh Posté le 17-10-2003 à 16:57:07    

El_gringo a écrit :


 
ha ouais, pas con ça. Mais c'est une webapp, j'passe par tomcat. Jusqu'a maintenant j'ai pas mis le nez dans le script de démarrage.


Regardes plutôt du côté des fichiers de conf de tomcat, tu dois pouvoir mettre ça dans les propriétés de ton context. Sinon cette bibliothèque (car c'est bien bibliothèque le mot français), tu l'as mise où ?

Reply

Marsh Posté le 17-10-2003 à 17:05:26    

R3g a écrit :


Regardes plutôt du côté des fichiers de conf de tomcat, tu dois pouvoir mettre ça dans les propriétés de ton context. Sinon cette bibliothèque (car c'est bien bibliothèque le mot français), tu l'as mise où ?


 
C'est dans un fichier conf de tomcat que j'ai fais mes 2 premiers changements (dans tomcat4.conf je crois).
Et, mes .so, je les ai mises un peu partout! Nottament dans des chemins faisant partie de java.library.path
 [:sisicaivrai]  
(ouf, bientôt le week end !)

Reply

Marsh Posté le 17-10-2003 à 17:08:14    

El_gringo a écrit :


 
C'est dans un fichier conf de tomcat que j'ai fais mes 2 premiers changements (dans tomcat4.conf je crois).
Et, mes .so, je les ai mises un peu partout! Nottament dans des chemins faisant partie de java.library.path
 [:sisicaivrai]  
(ouf, bientôt le week end !)


Et tu as essayé de les mettre dans le repertoire /lib de ton context ? (enfin je suis plus sur du nom... le repertoire où tu mets les jars dont tu as besoin)

Reply

Marsh Posté le 18-10-2003 à 17:49:45    

defini le LD_LIBRARY_PATH ds le script de demarrage de tomcat: tu dois y mettre le chemin complet, fichier.so y compris

Reply

Sujets relatifs:

Leave a Replay

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