Problemilla con JAVA y JNI

Moderadores: Kravenbcn, largeroliker, fidelcastro, cerealkiller, pspCaracas, m0skit0, LnD, ka69, zacky06

Avatar de Usuario
Yn$an€
Desarrollador
Desarrollador
Mensajes: 258
Registrado: 11 Feb 2011, 21:44

Problemilla con JAVA y JNI

Mensaje por Yn$an€ »

Pues me rindo, llevo dos horas intentando que Java me cargue una librería nativa en Linux (una librería dinámica en la jerga, aka .so) y no doy pasado del error este:

Spoiler:

Código: Seleccionar todo

Exception in thread "main" java.lang.UnsatisfiedLinkError: no libSDL.so in java.library.path


Spoiler:

Código: Seleccionar todo

public class keyReader {
   
   public boolean arraykeys[] = new boolean[7];
   
   /*
   static {
       System.loadLibrary("user32");
     }
   
   native int GetKeyState(int in);
   
   
   public boolean[] Poll(){
      
      arraykeys[1] = GetKeyState(5) > 0 ? true:false;
      arraykeys[2] = GetKeyState(5) > 0 ? true:false;
      arraykeys[3] = GetKeyState(5) > 0 ? true:false;
      arraykeys[4] = GetKeyState(5) > 0 ? true:false;
      arraykeys[5] = GetKeyState(5) > 0 ? true:false;
      
      return arraykeys;
   }
   */

   static {
       System.loadLibrary("libSDL.so");
     }

native int GetKeyState(int in);
   
   
   public boolean[] Poll(){
      
      arraykeys[1] = GetKeyState(5) > 0 ? true:false;
      arraykeys[2] = GetKeyState(5) > 0 ? true:false;
      arraykeys[3] = GetKeyState(5) > 0 ? true:false;
      arraykeys[4] = GetKeyState(5) > 0 ? true:false;
      arraykeys[5] = GetKeyState(5) > 0 ? true:false;
      
      return arraykeys;
   }

}

Que conste que tengo el library.path configurado correctamente y la biblioteca en su lugar correspondiente, pero no hay manera.

Si alguien sabe como solucionarlo, o una forma alternativa de hacer polling en java nativamente, agradecería me lo explicase, porque estoy atascado en este punto y no puedo avanzar sin probar el código.
(Necesito generar los paquetes con los datos en tiempo real y comprobar si al enviarlos vía TCP/IP se producen fallas lógicas en el formato de paquete que he creado). La otra condición es que los eventos de teclado NO sirven, y eso es porque el código es muy poco eficaz para, por ejemplo, juegos; esa parte del código sería lo equivalente al movimiento de un personaje de videojuegos.

Para m0skit0 y pspCaracas: OpenWRT ya está instalado. La solución final va a ser una mezcla de cosas explosiva (e ineficiente, pero es lo que hay). Para la interfaz y control, java; es fácilmente deducible. El motivo es que me interesa practicarlo para coger soltura. Para la generación de los paquetes, una librería con exportaciones a la plataforma JNI, dado que esto lo hace un compañero mío. Para comunicarme con el router, emularé netcat desde Java y enviaré los paquetes a través de esto.

Elegante sincretismo de conceptos y metodologías, diría yo :canuto: :canuto:
(Para partirse el culo por el camino, si no va me pillo C++ o C y fuera)

Bueno, si no os habéis cansado de leer y seguís con ganas de ayudar, muchísimas gracias.
... after all, we're all alike.

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: Problemilla con JAVA y JNI

Mensaje por m0skit0 »

Estas cosas de bajo nivel no se hacen con Java hombre. Mala elección de lenguaje. Pero como insistes...

Yn$an€ escribió:Para comunicarme con el router, emularé netcat desde Java y enviaré los paquetes a través de esto.

:? Reinventar la rueda...

Dicho esto, ¿has probado con libSDL a secas?
Imagen

Avatar de Usuario
Yn$an€
Desarrollador
Desarrollador
Mensajes: 258
Registrado: 11 Feb 2011, 21:44

Re: Problemilla con JAVA y JNI

Mensaje por Yn$an€ »

Ya lo pensé, pero me apetecía bastante. Por eso me molesto en emular el netcat. Nunca lo he hecho y quiero saber si soy capaz. No obstante estoy de acuerdo en lo que respecta al lenguaje :lol:

Si, he probado de todas las formas posibles y todo tipo de combinaciones, pero nada.

EDITO: Ya encontré la solución.

Necesito crear wrappers para las funciones en una librería dinámica que exporte unos punteros exóticos para que java los reconozca.
... after all, we're all alike.

Avatar de Usuario
pspCaracas
Moderador Global
Moderador Global
Mensajes: 3080
Registrado: 03 Sep 2009, 03:29
Ubicación: Buenos Aire - Argentina
Contactar:

Re: Problemilla con JAVA y JNI

Mensaje por pspCaracas »

El tiempo es limitado como para estar perdiéndolo en ver si de verdad puedes...convéncete de que si puedes y usa netcat :roll:

EDITO:

Por cierto, recuerda que el router NO es un PC, es decir, vas a tener poca RAM, nada de swap y un procesador poco potente. Asumir que java te va a funcionar como en el PC puede ser un error garrafal. Solo ponte a pensar que para correr Java vas a necesitar una máquina virtual, la cual a su vez traducirá a lenguaje máquina el bytecode generado...en C simplemente ejecutas directamente, nada de interpretaciones de por medio, es decir, no mal gastas recursos (memoria, CPU, etc).

Usa C que es un lenguaje para machos!! (por eso aun me cuesta :lol: )
http://farm3.static.flickr.com/2497/3983880148_f5ae0aaab2_o.png

Avatar de Usuario
Yn$an€
Desarrollador
Desarrollador
Mensajes: 258
Registrado: 11 Feb 2011, 21:44

Re: Problemilla con JAVA y JNI

Mensaje por Yn$an€ »

pspCaracas escribió:El tiempo es limitado como para estar perdiéndolo en ver si de verdad puedes...convéncete de que si puedes y usa netcat :roll:


El programa en Java es para el PC, en el router uso netcat :D
Con el programa voy a emular una conexión de netcat (es decir, como si usase netcat, pero en realidad es mi programa), al que se conectará el netcat del router.

Por cierto, recuerda que el router NO es un PC, es decir, vas a tener poca RAM, nada de swap y un procesador poco potente. Asumir que java te va a funcionar como en el PC puede ser un error garrafal. Solo ponte a pensar que para correr Java vas a necesitar una máquina virtual, la cual a su vez traducirá a lenguaje máquina el bytecode generado...en C simplemente ejecutas directamente, nada de interpretaciones de por medio, es decir, no mal gastas recursos (memoria, CPU, etc).


Sólo para aclarar, el ruter usa netcat ;)

pspCaracas escribió:Usa C que es un lenguaje para machos!! (por eso aun me cuesta :lol: )


Yo ya uso C
Imagen
... after all, we're all alike.

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: Problemilla con JAVA y JNI

Mensaje por m0skit0 »

Yn$an€ escribió:emular una conexión de netcat

¿Emular una conexión de netcat? Una conexión de netcat es simplemente una conexión TCP o UDP estándar :roll:
Imagen

Avatar de Usuario
Yn$an€
Desarrollador
Desarrollador
Mensajes: 258
Registrado: 11 Feb 2011, 21:44

Re: Problemilla con JAVA y JNI

Mensaje por Yn$an€ »

m0skit0 escribió:
Yn$an€ escribió:emular una conexión de netcat

¿Emular una conexión de netcat? Una conexión de netcat es simplemente una conexión TCP o UDP estándar :roll:


OK, ya lo sé. Y luego usa pipes para redirigir los flujos a la entrada estándar. La función dup(), creo que es. Si. Pero no deja de ser emular una conexión del netcat, en mi opinión.

Que un programa pase por el otro, vamos, si he cometido alguna imprecisión te dije una vez que vienen de fábrica. :canuto:
... after all, we're all alike.

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: Problemilla con JAVA y JNI

Mensaje por m0skit0 »

Yn$an€ escribió:Pero no deja de ser emular una conexión del netcat, en mi opinión.

Pues tu opinión es la contraria a la mía :lol:
Imagen

Avatar de Usuario
pspCaracas
Moderador Global
Moderador Global
Mensajes: 3080
Registrado: 03 Sep 2009, 03:29
Ubicación: Buenos Aire - Argentina
Contactar:

Re: Problemilla con JAVA y JNI

Mensaje por pspCaracas »

Imagen

Hijo, la rueda ya existe...y no es cuadrada!!
http://farm3.static.flickr.com/2497/3983880148_f5ae0aaab2_o.png

Avatar de Usuario
Yn$an€
Desarrollador
Desarrollador
Mensajes: 258
Registrado: 11 Feb 2011, 21:44

Re: Problemilla con JAVA y JNI

Mensaje por Yn$an€ »

Si querían que me rindiera, pos bien, me rindo. Usaré netcat.

Yo lo único que quería era aprender...
... after all, we're all alike.

Responder