PDA

View Full Version : [JAVA] jni + gcc


Oceans11
06-07-2007, 17:12
ho seguito passo passo il tutorial che sta qui (http://java.sun.com/docs/books/jni/html/start.html#26568)
solo che gcc non ne vuole sapere di trovare jni.h e se la metto nella stessa dir del file .c ottengo tanti di quegl'errori che il buffer del prompt non li regge!!!! :cry:
:muro:
:mc:

come faccio??? mi sapete intanto indicare i parametri che devo dare a gcc per compilare una libreria dinamica???

PGI-Bis
06-07-2007, 17:41
Dovrebbero esserci due cartelle da includere, una è quella che contiene l'header jni.h e l'altra... altra roba che varia da sistema operativo a sistema operativo. Le due cartelle sono in:

...\jdk\include
...\jdk\include\nome del sistema operativo

Oltre a questo credo che occorra specificare altre trentamila opzioni, perchè... be', è gcc :D

Oceans11
13-07-2007, 10:50
Dovrebbero esserci due cartelle da includere, una è quella che contiene l'header jni.h e l'altra... altra roba che varia da sistema operativo a sistema operativo. Le due cartelle sono in:

...\jdk\include
...\jdk\include\nome del sistema operativo

Oltre a questo credo che occorra specificare altre trentamila opzioni, perchè... be', è gcc :D

arieccomi!!! :D
sono stato assente in questi giorni...e ancora non ho capito che diamine di parametro devo dare a gcc per passargli il percorso delle cartelle in questione...in effetti guardando un pò la marea di errori che mi sparava fuori gcc mi sono accorto che cercava anche altri header file che stanno in \include\win32\

nonostante il mio impegno, gcc continua imperterrito a svalvolare. Sicuramente sbaglio con i parametri!!

La mia domanda quindi si fa più precisa:
Come compilo dll con gcc passando come parametri i vari percorsi di header file???


grazie a tutti per la pazienza!

lovaz
13-07-2007, 11:17
-I directory

Oceans11
13-07-2007, 11:20
mmm...le ho provate talmente tante che non so più se ho provato pure questa ma penso di sì...farò più attenzione adesso...grazie per la risposta!

PGI-Bis
13-07-2007, 12:38
Guarda, ti incollo il comando che uso io (windowsxp, mingw):

gcc -Wall -D_JNI_IMPLEMENTATION_ -Wl,--kill-at -Ic:\programmi\java\jdk\include -Ic:\programmi\java\jdk\include\win32 -shared NOME_SORGENTE.c -o NOME_LIBRERIA.dll

Incidentalmente funziona. Nota che non so se funzioni con più di un sorgente C. Ho letto da qualche parte che bisogna aggiungere un occhio di rana e delle ali di pipistrello ma non posso confermare nè smentire.

Oceans11
13-07-2007, 16:55
Guarda, ti incollo il comando che uso io (windowsxp, mingw):

gcc -Wall -D_JNI_IMPLEMENTATION_ -Wl,--kill-at -Ic:\programmi\java\jdk\include -Ic:\programmi\java\jdk\include\win32 -shared NOME_SORGENTE.c -o NOME_LIBRERIA.dll

Incidentalmente funziona. Nota che non so se funzioni con più di un sorgente C. Ho letto da qualche parte che bisogna aggiungere un occhio di rana e delle ali di pipistrello ma non posso confermare nè smentire.



ok perfetto lo provo!anch'io sto con winxp e mingw...devo vedere un pò cosa sono tutti quei parametri perchè non ne ho la minima idea!!! :D

cmq tanto per la cronaca io davo questo comando:

C:\>gcc -Ic:\Programmi\Java\jdk1.6.0\include -Ic:\Programmi\Java\jdk1.6.0\include\win32 -IC:\Programmi\MinGW\lib HelloWorld.c

...e questo è l'ultimo errore della saga: :D

C:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../libmingw32.a(main.o):main.c:(.text+0x106): undefined reference to `WinMain@16'
collect2: ld returned 1 exit status

lovaz
13-07-2007, 18:16
Prova ad aggiungere --add-stdcall-alias

Oceans11
16-07-2007, 09:31
Prova ad aggiungere --add-stdcall-alias

non riconosce il parametro!!

invece così funziona:

Guarda, ti incollo il comando che uso io (windowsxp, mingw):

gcc -Wall -D_JNI_IMPLEMENTATION_ -Wl,--kill-at -Ic:\programmi\java\jdk\include -Ic:\programmi\java\jdk\include\win32 -shared NOME_SORGENTE.c -o NOME_LIBRERIA.dll

anche se sono ignorante e non ho capito il perchè...ho anche provato barbaramente e arbitrariamente a togliere alcuni parametri tipo --kill-at e -Wl e -D_JNI etc...solo nella forma originale però funge!!!


in ogni modo grazie mille per la disponibilità e.... per i miei ritardi nel postare! :D