|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Bannato
Iscritto dal: Jan 2002
Città: Roma
Messaggi: 1130
|
[Linux, Java, JNI, C] chi capisce questo errore?
Ho scritto una classe Java che si chiama Ipktgen, utilizzando le JNI richiamo del codice scritto in C. Per poter funzionare la JNI, il codice C deve essere compilato in una libreria, in questo caso la libLpktgen.so.
Sinteticamente il funzionamento è questo: scrivo un file C, lo compilo in una libreria e dal codice java carico questa libreria. Credo che l'errore sia dovuto a questo: la classe Ipktgen carica la libreria libLpktgen.so ma il caricamento si blocca quando incontra la riga di codice "libnet_init". libnet_init è una funzione primitiva utilizzata da una libreria che ho importato correttamente nel file C, quindi non capisco perchè non ne riconosce il significato, sapete aiutarmi? [root@localhost codice]# java Ipktgen Exception in thread "main" java.lang.UnsatisfiedLinkError: /usr/java/j2sdk1.4.2_08/jre/lib/i386/client/libLpktgen.so: /usr/java/j2sdk1.4.2_08/jre/lib/i386/client/libLpktgen.so: undefined symbol: libnet_init at java.lang.ClassLoader$NativeLibrary.load(Native Method) at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1586) at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1511) at java.lang.Runtime.loadLibrary0(Runtime.java:788) at java.lang.System.loadLibrary(System.java:834) at Ipktgen.<clinit>(Ipktgen.java:4) |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
|
posta l'output di:
ldd /usr/java/j2sdk1.4.2_08/jre/lib/i386/client/libLpktgen.so |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Ti avevo già consigliato di linkare la tua libreria con libnet, lo hai provato?
Quote:
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
|
#4 | |
|
Bannato
Iscritto dal: Jan 2002
Città: Roma
Messaggi: 1130
|
Quote:
il problema è che nel file C c'è la riga #include <libnet.h> come faccio a farlo includere nella libreria condivisa? Ho porvato a scrivere così ma mi da lo stesso errore: gcc -shared -o -lnet libLpktgen.so pktgen.c |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
|
non devi farlo includere, per aggiungere una directory alla lista di quelle utilizzate per cercare gli header devi usare l'opzione -I seguita dal path della directory che contiene libnet.h
|
|
|
|
|
|
#6 | ||
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
Quote:
gcc -shared -o libLpktgen.so pktgen.c -lnet
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 Ultima modifica di ilsensine : 20-09-2005 alle 14:58. |
||
|
|
|
|
|
#7 |
|
Bannato
Iscritto dal: Jan 2002
Città: Roma
Messaggi: 1130
|
funziona.
grazie 1000 |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:11.



















