/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Problemer med at benytte JNI i en package
Fra : Rene Just Nielsen


Dato : 03-12-01 14:20

Hej

Vi sidder med et trælst problem med Java... og JNI

Vi har et "hovedprogram" (hovedprogram.class), som benytter en klasse
(TestJNI.class) i en package (jni). "TestJNI.class" skal vha. JNI
benytte en funktion i en device driver (driver.c), som ligger i samme
directory som "hovedprogram.class".

Programmet er meget simpelt og kalder blot c-funktionen "canStart()" og
skriver derefter en eller anden kvittering ud på skærmen.


----------- Problem: ---------

Når "TestJNI" ligger i pakken "jni" og benyttes af "hovedprogram" kan
"canStart" ikke findes og vi får fejlmeddelelsen "UnsatisfiedLinkError".
Når "TestJNI" placeres i samme dir. som "hovedprogram" (og linjerne med
hhv. "package" og "import" fjernes) kan "canStart" fint køres.

Vi kan altså ikke tilgå native-metoder, der ligger i en pakke.


----------- Spørgsmål: -----------

Hvordan kan vi få "hovedprogram" til at tilgå "canStart", hvor skal de
forskellige filer (.c, .so og .h) placeres og hvordan skal det
kompileres?

Mvh.
René Just Nielsen


----------- Bonus-info: -----------

Følgende er foretaget:

1. javac hovedprogram.java
2. javah -jni jni/TestJNI (filen "jni_0002fTestJNI.h" genereres i
samme dir. som hovedprogram.class)
3. i "driver.c" rettes alle funktionsnavne til
"JAVA_jni_0002fTestJNI_funktionsNavneIJava"
4. gcc -O2 -Wall -c -I /usr/java/jdk1.3.1/include -I
/usr/java/jdk1.3.1/include/linux driver.c (filen "driver.o"
genereres)
5. gcc -shared -Wall driver.o -o libdriver.so (filen "libdriver.so"
genereres)

....og helt uden fejlmeddelelser.

Når så hovedprogrammet eksekveres ("java hovedprogram") kommer
fejlmeddelelsen "UnsatisfiedLinkError" - og de linjer, hvor kaldet af
funktionen "canStart" er på.

 
 
Christian Hemmingsen (03-12-2001)
Kommentar
Fra : Christian Hemmingsen


Dato : 03-12-01 17:41

Rene Just Nielsen <rjni00@kom.auc.dk> writes:

> Når så hovedprogrammet eksekveres ("java hovedprogram") kommer
> fejlmeddelelsen "UnsatisfiedLinkError" - og de linjer, hvor kaldet af
> funktionen "canStart" er på.

Er i sikre på at .so filen ligger et sted hvor linkeren leder?

--
Christian Hemmingsen

Rene Just Nielsen (04-12-2001)
Kommentar
Fra : Rene Just Nielsen


Dato : 04-12-01 08:32

Det skulle jeg mene...

Vi har dels prøvet at placere .so-filen forskellige steder (i dir'et med
vores .java-filer og i /usr/java/jdk1.3.1/bin samt
/usr/java/jdk1.3.1/jre/bin) og dels har vi prøvet at henvise til
forskellige steder med LD_LIBRARY_PATH.

/Rene Just Nielsen



Christian Hemmingsen wrote:
>
> Rene Just Nielsen <rjni00@kom.auc.dk> writes:
>
> > Når så hovedprogrammet eksekveres ("java hovedprogram") kommer
> > fejlmeddelelsen "UnsatisfiedLinkError" - og de linjer, hvor kaldet af
> > funktionen "canStart" er på.
>
> Er i sikre på at .so filen ligger et sted hvor linkeren leder?
>
> --
> Christian Hemmingsen

Brian Matzon (04-12-2001)
Kommentar
Fra : Brian Matzon


Dato : 04-12-01 09:27

> Det skulle jeg mene...
>
> Vi har dels prøvet at placere .so-filen forskellige steder (i dir'et med
> vores .java-filer og i /usr/java/jdk1.3.1/bin samt
> /usr/java/jdk1.3.1/jre/bin) og dels har vi prøvet at henvise til
> forskellige steder med LD_LIBRARY_PATH.
Hvad med at placere den enten ved jeres class fil, eller i roden
af codebase?

/Brian Matzon



Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408526
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste