/
Forside
/
Teknologi
/
Udvikling
/
Java
/
Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn
*
Kodeord
*
Husk mig
Brugerservice
Kom godt i gang
Bliv medlem
Seneste indlæg
Find en bruger
Stil et spørgsmål
Skriv et tip
Fortæl en ven
Pointsystemet
Kontakt Kandu.dk
Emnevisning
Kategorier
Alfabetisk
Karriere
Interesser
Teknologi
Reklame
Top 10 brugere
Java
#
Navn
Point
1
molokyle
3688
2
Klaudi
855
3
strarup
740
4
Forvirret
660
5
gøgeungen
500
6
Teil
373
7
Stouenberg
360
8
vnc
360
9
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
Alle emner
Teknologi
Udvikling
Java
Indstillinger
Spørgsmål
Tips
Usenet
Reklame
Statistik
Spørgsmål :
177552
Tips :
31968
Nyheder :
719565
Indlæg :
6408847
Brugere :
218887
Månedens bedste
Årets bedste
Sidste års bedste
Copyright © 2000-2024 kandu.dk. Alle rettigheder forbeholdes.