JNI (Java Native Interface) Centos

En este blog se mostrara como crear un archivo sencillo en Java para mostrar el Famoso Hola Mundo Utilizando JNI, para saber mas de Java Native Interface Verificar el siguiente Link:

https://www3.ntu.edu.sg/home/ehchua/programming/java/JavaNativeInterface...
La realizacion del pequeño tutorial se realiza mediante el SO Linux en particular CENTOS; Buenos empezemos a realizar la creacion del programa y la compilacion.

  • Se crea primeramente la clase Java la llamaremos Testing.java
  • class Testing{
        private native void Hola();
        public static void main(String... args){
         System.loadLibrary("Testing");// recibe el nombre de una libreria dinamica y la carga...
         new Test().Hola();
        }

       
    }

    Posteriormente cuando ya se tiene creada la clase se compila en mi caso seria de la siguiente manera.

    javac Testing.java Realizamos la compilacion de la clase Testing.java
    y tambien compilamos de la siguiente manera donde nos generara un archivo Testing.h

    javah Testing y nos genera el header nativo de C.

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

    #ifndef _Included_Test
    #define _Included_Test
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
     * Class:     Testing
     * Method:    Hola
     * Signature: ()V
     */

    JNIEXPORT void JNICALL Java_Test_sayHello
      (JNIEnv *, jobject);

    #ifdef __cplusplus
    }
    #endif
    #endif

    Ya tenemos la compilacion de Java y la creacion del Header Nativo de C.

    Despues creamos una clase en C que se llamara Testing.c y quedaria de la siguiente forma:

    #include <jni.h>
    #include <stdio.h>
    #include "Testing.h"

    JNIEXPORT void JNICALL Java_Test_Hola(JNIEnv *env, jobject obj)
    {
            printf("\t Hola Bienvendo JNI JAVA Y C!\n\n\t Creando JNI C con Java (-_-)");
            return;
    }

    Posteriormente para ver el resultado final realizaremos la compilacion de la siguiente manera en este caso lo estoy realizando desde la consola de Centos.

  • Tenemos que exportar el path donde se encuentra nuestro archivo
  • En este caso yo lo tengo en una carpeta (JNI)en escritorio donde se encuentran todos los archivos creados anteriormente.
    export LD_LIBRARY_PATH='/home/guru/Escritorio/JNI'

  • Luego creamos un echo del PATH del LIBRARY_PATH de la siguiente forma
  • echo ${LD_LIBRARY_PATH}
    para confirmar nos muestra la ruta donde se encuentra nuestros archivos.

  • Realizamos la compilacion de nuestro archivo Testing.c en este caso para realizar la compilacion se utiliza gcc
  • si no lo tenemos instalado tendriamos que realizar la instalacion del gcc en linux.

    Para realizar la compilacion en la consola pondremos la siguiente linea.

    gcc -shared -fpic -I/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.33/include -I/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.33/include/linux Testing.c -o libTesting.so

    Donde:
    -I/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.33/include ruta donde se encuentra instalado nuestro jdk e include que se utilizara.
    y
    posteriormente volvemos a poner la siguiente ruta agregando los parametros linux Testing.c que es el nombre del archivo en c creado
    -o libTesting.so es el nuevo archivo que se creo en nuestra carpeta para poder compilar nuestra aplicacion de java.
    -I/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.33/include/linux Testing.c -o libTesting.so

    Por ultimo ejecutamos en consola el siguiente comando para ver el resultado final:
    java Testing
    Resultado:

     Hola Bienvendo JNI JAVA Y C!

             Creando JNI C con Java (-_-)

    Saludos

    Comentarios

    Opciones de visualización de comentarios

    Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
    Imagen de ezamudio

    y en el otro sentido

    Esto es para poder invocar un método de Java desde C. Ahora estaría bueno ver la otra parte: invocar una función en C desde Java...

    Imagen de joseguru

    respuesta

    En eso estoy trabajando maestro, estoy realizando por paso de parametros para ver una respuesta de Java a C, posteriormente pongo a la inversa.
    Saludos.

    The Java Native Interface

     

    Portada - imgur.com

    The Java Native Interface: Programmer's Guide and Specification

    Para aquellos interesados, este libro es un clásico sobre el tema. Hay una vista previa en Google Books. He visto que algunos sitios web (incluyendo los de algunas universidades) distribuyen una versión en PDF del mismo. No sabría decir si de forma legal.

    La verdad es que se han gastado muchos bytes al respecto. Tan sólo hay que ver las referencias externas en la correspondiente entrada en Wikipedia.

    ~~~

    Imagen de joseguru

    Gracias The Java Native

    Tienes razon hay algunas distribuciones en PDF y mucha informacion al respecto, de todo lo relacionado con JNI.
    saludos.

    Imagen de Jose Manuel

    Muy buen aporte, me dan ganas

    Muy buen aporte, me dan ganas de jugarle un poco, solo una crítica constructiva: es común olvidar que Linux es solo el kernel el SO es el proyecto GNU y Linux, osea, GNU/Linux. De nuevo, MUY BUEN APORTE.
    Saludos.