chargement de librairies C++ [JNI][résolu] - Java - Programmation
Marsh Posté le 05-07-2007 à 17:12:30
donc pour que ça marche avant le dlopen de libprojet il faut ajouter :
dlopen("libgd.so",RTLD_NOW|RTLD_GLOBAL)
bon maintenant c'est tomcat qui me soule car en local ça marche niquel (en lançant un main() à la main) mais avec tomcat j'obtiens un joli :
java.lang.UnsatisfiedLinkError: org/xxx/persistance/jni/RasterDAO.getRaster
ça commence à me courrir cette histoire
Marsh Posté le 05-07-2007 à 21:28:21
re :
donc il faut avoir le LD_LIBRARY_PATH et java.library.path qui pointe sur le .so et penser à coller la classe qui charge la librairie dans le $TOMCAT_HOME/shared/lib
Marsh Posté le 05-07-2007 à 11:41:05
Bonjour,
en ce moment je fais un peu de JNI pour faire de la génération d'image à partir d'une base de données (plus quelques calculs statistiques)
Les performances en java étant clairement horrible pour ces tâches (rapport quasi de 10 comparé à C ou C++) je suis en train de mettre en place une API C à laquelle j'accède par JNI.
On peut représenter l'application comme suit :
TOMCAT |
------------------------
appli web |
+ classe "JNI" |---------------> libGrille.so -------------------------> libprojetXbd.so
| implémentant les fonctions natives
libGrille.so permet juste de modifier les parametres reçues des objets java et les transmets à la lib obtenant les données et générant les images. Il y a deux lib car plusieurs personnes utilisent libprojetXdb.so et ils n'ont aucune raison de manipuler ma libGrille.so.
Le soucis est que libprojetXdb.so a besoin de gd pour créer ses images (enfin je pense car je ne sais pas vraiment le rôle de gd) et lorsque j'execute mon code java j'obtiens un joli :
erreur dlopen libprojetXdb.so : /home/jansankar/projet/projetX/lib/libprojetXdb.so: undefined symbol: gdImageColorAllocate
donc j'ai l'habitude d'avoir des library not found machin que je résous à coup de -Djava.library.path
sauf que la c'est une erreur C++ un peu génante car de base si j'avais un programme tout en C++ je le résous avec un -lgd lors de ma compil sauf que la je fais une lib donc je n'ai pas d'édition de lien.
voici la tête de ma ligne de compilation
g++ -shared -Wno-deprecated -fPIC -o libRasterDAO.so -I/usr/local/j2sdk/include/ RasterDAO.cpp
et pour idée une partie du code ma classe C++ :
Message édité par jan san kar le 05-07-2007 à 21:28:43