Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Come posso risolvere questo errore???

0 views
Skip to first unread message

Marco Piraccini

unread,
Nov 3, 2004, 1:32:37 PM11/3/04
to
Ciao,
ho un problema, tento di farmi capire il più possibile...

Ho implementato una piccola interfaccia grafica in Java, questa
interfaccia richiama metodi scritti in C++. Per fare questo ho visto che
Java può farlo attraverso l'uso JNI e dei metodi nativi.


Attraverso questa piccola classe mi sono cretao il metodo nativo:

public class PassParameters {

public native int Event_Procc_Init(.... passo dei valori.... );

static{
System.loadLibrary("EventProcInit");//Carica la libreria
}
}


Una volta finito di implementare anche il file .cc compilo il tutto:

- compilo i sorgenti java con "javac"

- con "javah -jni" mi creo il file PassParameters.h

- con il comando "g++ -o libEventProcInit.so -shared
-Wl,-soname,libEventProcInit.so -I/Java/jdk1.5.0/include
-I/Java/jdk1.5.0/include/linux PassParameters.cc -static -lc" mi creo la
shared library


Una volta fatto questo se in PassParameters.cc non ho scritto nulla di
speciale (es. stamapare a video dei valori) il tutto funziona, ma nel
caso in cui includo degli altri file e richiamo dei metodi già fatti in
C++ il tutto si complica.

Per comilare il file .cc devo modificare il comando g++.... ma come??

Tutti gli altri file inclusi sono già stati compilati correttamente ...
quindi ora bisogna modificare il comando g++ indicando le librerie .so
che sono già fatte che mi servono.

Ho provato modificandolo così:

g++ -o libEventProcInit.so -shared ../lib/*.so
/sw/antares/antares-daq-old/out/Linux/lib/*.so -I/Java/jdk1.5.0/include
-I/Java/jdk1.5.0/include/linux PassParameters.cc -static -lc

Facendo così mi crea una libEventProcIniti.so di dimensioni enormi, ma
cmq compila, quando vado ad eseguire il programma mi da questo errore:

Exception in thread "main" java.lang.UnsatisfiedLinkError:
/home/EventProcessor/GUI/libEventProcInit.so: libclntsh.so.8.0: cannot
open shared object file: No such file or directory
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1739)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1664)
at java.lang.Runtime.loadLibrary0(Runtime.java:821)
at java.lang.System.loadLibrary(System.java:991)
at PassParameters.<clinit>(PassParameters.java:8)
at EventProcessorGUI.<init>(EventProcessorGUI.java:9)
at EventProcessorGUI.main(EventProcessorGUI.java:782)

Da cosa può essere dato???

Sbaglio il comando per generare la shared library??

Al posto di mettere le librerie nel comando g++, posso metterle
all'interno di questa classe

public class PassParameters {

public native int Event_Procc_Init(.... passo dei valori.... );

static{
System.loadLibrary("EventProcInit");//Carica la libreria
System.loadLibrary("pippo")//ne metto una ad una qui
System.loadLibrary("pluto")
}
}

Così non mi crea una libreria di dimensioni esagerate!!

Ma se ho molte librerie, mi tocca scriverle tutte?? o c'è un comado per
rendere tutto più veloce..

Come posso fare???? Conto di essermi fatto capire il più possibile....

Grazie in aticipo a tutti!!!

Marco Piraccini

pira...@cs.unibo.it
marco.p...@fastwebnet.it

0 new messages