Torna indietro   Hardware Upgrade Forum > Software > Programmazione

L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026
La parola d'ordine al Nextcloud Summit 2026, che si è tenuto a Monaco, è stata "sovranità". Non come è spesso usato questo termine in politica ma, al contrario, come capacità positiva di decidere il proprio destino tecnologico, con modalità collaborative e aperte. L'Europa dice già molto nel mondo open source, che viene visto come mezzo per ottenere la tanto agognata autonomia digitale
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più
Dreame X60 Pro Ultra Complete implementa due bracci estensibili, per spazzola e moccio, che si spingono ben oltre quanto visto sino ad oggi permettendo una pulizia di casa ancor più capillare e precisa
TCL 65C8L, la recensione del SQD-Mini LED da 4400 nit misurati
TCL 65C8L, la recensione del SQD-Mini LED da 4400 nit misurati
La tecnologia SQD-Mini LED di TCL arriva sul taglio da 65 pollici con la serie C8L: 2040 zone, pannello WHVA 2.0 e un picco che alle rilevazioni delle sonde tocca i 4400 nit nel profilo Filmmaker e un HDR quasi perfetto
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 05-09-2005, 16:12   #1
ambuotiz
Bannato
 
Iscritto dal: Jan 2002
Città: Roma
Messaggi: 1130
Problema con le JNI

Ho un problema con le JNI quando scrivo il codice sorgente C
questa è una parte del codice sorgente C (ci metto anche i numeri di riga per maggior chiarezza.

4. JNIEXPORT jint JNICALL Java_Ipktgen_Pktgen
5. (JNIEnv *, jobject obj, jint ttl, jlong d_ip, jintArray payload);
6. {

durante la compilazione mi da questo errore:

pktgen.c:5: error: syntax error before '{' token
ambuotiz è offline   Rispondi citando il messaggio o parte di esso
Old 05-09-2005, 20:25   #2
kingv
Senior Member
 
L'Avatar di kingv
 
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
togli il punto e virgola in fondo alla riga.
kingv è offline   Rispondi citando il messaggio o parte di esso
Old 06-09-2005, 12:00   #3
ambuotiz
Bannato
 
Iscritto dal: Jan 2002
Città: Roma
Messaggi: 1130
Quote:
Originariamente inviato da kingv
togli il punto e virgola in fondo alla riga.
hai ragione.
Ora sono riuscito a compilare tutto (non pensavo di riuscirci) mi rimangono solo un paio di warning:

pktgen.c: In function `main':
pktgen.c:112: warning: control reaches end of non-void function

credo che la parte di codice che da errore sua questa:

110. return 0;
111. }
112. int main() {}
ambuotiz è offline   Rispondi citando il messaggio o parte di esso
Old 06-09-2005, 12:48   #4
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
anziché

int main() {}

prova a scrivere

int main() {
return 0;
}
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 06-09-2005, 13:41   #5
ambuotiz
Bannato
 
Iscritto dal: Jan 2002
Città: Roma
Messaggi: 1130
Posto tutto il codice:

#include <stdio.h>
#include <libnet.h>
#include "Ipktgen.h"


JNIEXPORT jint JNICALL Java_Ipktgen_Pktgen
(JNIEnv *env, jobject obj, jint ttl, jlong d_ip, jintArray payload)
{
struct input_struct
{
u_long s_ip; /* source ip address */
u_long d_ip; /* destination ip address */
u_char *data; /* ip payload */
u_short data_size; /* ip payload size */
}
input;

u_short h_lenght; /* header lenght */
short n; /* byte wrote */
char err_buf[LIBNET_ERRBUF_SIZE]; /* error buffer */

libnet_t *l; /* libnet context handler */

/* set default */
input.d_ip=0;
input.data_size=0;
input.data=NULL;

/* initialize libnet_t* */
if ((l=libnet_init(LIBNET_RAW4, /* injection type */
NULL, /* network interface */
err_buf))==NULL) /* error buffer */
{
fprintf (stderr, "Error: %s\n", err_buf);
return -1;
}


/* build ipv4 header */
if (libnet_build_ipv4
(
h_lenght+input.data_size,/* len */
0, /* tos */
0x200, /* id */
0, /* frag */
ttl, /* ttl */
IPPROTO_TCP, /* transport protocol */
0, /* sum */
input.s_ip, /* source address */
d_ip, /* destination address */
NULL, /* ip payload */
0, /* ip payload size */
l, /* libnet context */
0 /* we don't need ptag */
)==-1)
{

fprintf (stderr, "Error %s\n", libnet_geterror(l));
return 1;
}

printf ("* IP header builded\n");

/* write packet */
if ((n=libnet_write(l))==-1)
fprintf (stderr, "Error %s\n", libnet_geterror(l));

printf ("* Packet correctly wrote on wire: %d bytes\n", n);

/* destroy all */
libnet_destroy(l);

return 0;
}
int main() {}
ambuotiz è offline   Rispondi citando il messaggio o parte di esso
Old 06-09-2005, 16:43   #6
kingv
Senior Member
 
L'Avatar di kingv
 
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
se vuoi che lo compiliamo ci serve anche il .h

il main toglilo non ne hai bisogno
kingv è offline   Rispondi citando il messaggio o parte di esso
Old 06-09-2005, 19:36   #7
ambuotiz
Bannato
 
Iscritto dal: Jan 2002
Città: Roma
Messaggi: 1130
Quote:
Originariamente inviato da kingv
se vuoi che lo compiliamo ci serve anche il .h

il main toglilo non ne hai bisogno
Il .h è questo:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include "jni.h"
/* Header for class Ipktgen */

#ifndef _Included_Ipktgen
#define _Included_Ipktgen
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: Ipktgen
* Method: Pktgen
* Signature: (IJ[I)I
*/
JNIEXPORT jint JNICALL Java_Ipktgen_Pktgen
(JNIEnv *, jobject, jint, jlong, jintArray);

#ifdef __cplusplus
}
#endif
#endif
ambuotiz è offline   Rispondi citando il messaggio o parte di esso
Old 06-09-2005, 23:35   #8
ambuotiz
Bannato
 
Iscritto dal: Jan 2002
Città: Roma
Messaggi: 1130
se tolgo il main mi da questo errore:
root@localhost codice]# gcc -Wall -o2 pktgen.c -o pktgen -lnet
/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.1/../../../crt1.o(.text+0x18): In funct ion `_start':
../sysdeps/i386/elf/start.S:98: undefined reference to `main'
collect2: ld returned 1 exit status
ambuotiz è offline   Rispondi citando il messaggio o parte di esso
Old 07-09-2005, 07:57   #9
kingv
Senior Member
 
L'Avatar di kingv
 
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
devi compilare una shared library, non un eseguibile....

gcc pktgen.c -o pktgen.so -shared -I/usr/java/j2sdk1.4.2_04/include -I/usr/java/j2sdk1.4.2_04/include/linux
kingv è offline   Rispondi citando il messaggio o parte di esso
Old 07-09-2005, 09:09   #10
ambuotiz
Bannato
 
Iscritto dal: Jan 2002
Città: Roma
Messaggi: 1130
Quote:
Originariamente inviato da kingv
devi compilare una shared library, non un eseguibile....

gcc pktgen.c -o pktgen.so -shared -I/usr/java/j2sdk1.4.2_04/include -I/usr/java/j2sdk1.4.2_04/include/linux
Se scrivo così mi compila lo stesso:
gcc -c -Wall -o2 pktgen.c -o pktgen
non conosco bene tutti i parametri di gcc, cosa sambia scrivendo come ho fatto io?
ambuotiz è offline   Rispondi citando il messaggio o parte di esso
Old 07-09-2005, 09:44   #11
kingv
Senior Member
 
L'Avatar di kingv
 
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
Quote:
Originariamente inviato da ambuotiz
Se scrivo così mi compila lo stesso:
gcc -c -Wall -o2 pktgen.c -o pktgen
non conosco bene tutti i parametri di gcc, cosa sambia scrivendo come ho fatto io?

se usi '-c' come hai fatto tu non passa per lo stadio di linking.
per compilare compila, ma ottieni un file oggetto cui non puoi accedere da java via jni.
kingv è offline   Rispondi citando il messaggio o parte di esso
Old 07-09-2005, 10:03   #12
ambuotiz
Bannato
 
Iscritto dal: Jan 2002
Città: Roma
Messaggi: 1130
ho un problema che non so come risolvere: devo passare un array di interi java al codice C. Per farlo ho scritto questo codice:

jsize len = (*env)->GetArrayLength(env, payload); //payload è il nome dell'array java di lunghezza len
jint *body = (*env)->GetIntArrayElements(env, payload, 0);
int cpayload [len]; //creo l'array C
int i;
for (i=0; i<len; i++)
{
cpayload[i] = body[i]; //copio i valori dell'array java nell'array C
}

input.d_ip=0;
input.data_size=len;
input.data=(u_char)*body; //questa riga mi da errore

l'errore che mi da il compilatore è questo:
warning: assignment makes pointer from integer without a cast

P.S. la variabile data è definita in questo modo:
u_char *data;
ambuotiz è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026 L'Europa conta nella tecnologia e può ess...
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più Dreame X60 Pro Ultra Complete: i bracci si esten...
TCL 65C8L, la recensione del SQD-Mini LED da 4400 nit misurati TCL 65C8L, la recensione del SQD-Mini LED da 440...
MSI Maestro 500 Wireless: ANC e 90 ore di autonomia a 70 euro MSI Maestro 500 Wireless: ANC e 90 ore di autono...
NL-LC1 è il primo dissipatore a liquido AIO di Noctua: silenzio è la parola d'ordine NL-LC1 è il primo dissipatore a liquido A...
Engwe O20 Boost: abbiamo provato in ante...
UWANT V800: addio al rullo rotante, l’as...
Keenetic Stellar 6 porta il WiFi 6 negli...
Instagram spinge sul formato orizzontale...
DMA, l'UE verso la designazione di AWS e...
Dalla fisica quantistica alla fibra: il ...
TikTok, il 59% dei video è AI Slop, 'sch...
Batterie stampate in 3D: la forma libera...
Honor X80 Pro Max ufficiale: vi bastano ...
HONOR Watch 6: batteria infinita, modali...
Windows 11, addio alle ricerche sul web:...
La vera sfida dell’IA non è adott...
Signal contro l'AI agentica: dare ai cha...
Amazon: l'human-in-the-loop non basta a ...
HONOR 600 Lite: design in metallo e batt...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 20:40.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v