jump to navigation

Compilacion nativa de codigo Java febrero 23, 2007

Posted by superpiwi in Java.
trackback

Hace unos cuantos meses que intente compilar nativamente una aplicacion que se conectaba a una base de datos Oracle mediante gcj

http://gcc.gnu.org/java/

Pero desisti, porque me daba problemas el driver de conexion de Oracle y la solucion era compilarlo nativamente (por entonces no tenia tiempo y lo cierto es que ahora tampoco, y lo deje aparcado). Pero el otro dia decidi echar otro vistazo y me alegro saber que ya estaba soportado.

Asi que corriendo me instale la nueva version de gcc (incluyendo gcj). Cuya instalacion comente en otro post.

instalacion de gcj

Vamos al tema. Como ejemplo voy a compilar nativamente una clase que implemente hace tiempo para copiar datos entre tablas. Esta formada por 2 clases “DatabaseUtil.java” y “Migracion.java”. mas detalles sobre estas clases en el siguiente post:

copiar tablas entre bases de datos

el comando para compilar a ejecutable nativamente es el siguiente:

gcj --main=Migracion -o migrar DatabaseUtil.java Migracion.java

(ojo son 2 guiones –main)

se nos genera un ejecutable con el nombre “migrar” (por la opcion -o de output)

si comprobamos el tipo de fichero:

/export>file migrar
migrar: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.5, dynamically linked (uses shared libs), not stripped

Si queremos ejecutarlo, nos aseguramos de tener en la variable de entorno LD_LIBRARY_PATH las librerias necesarias, para ello hacemos:

export LD_LIBRARY_PATH=/usr/local/lib

El comando “ldd” nos permite ver las librerias que necesitamos para que funcione:

/export/gcj > ldd migrar
/etc/libcwait.so => /etc/libcwait.so (0xb75e7000)
libgcc_s.so.1 => /usr/local/lib/libgcc_s.so.1 (0xb75dc000)
libgcj.so.7 => /usr/local/lib/libgcj.so.7 (0xb60eb000)
libm.so.6 => /lib/tls/libm.so.6 (0xb60bc000)
libpthread.so.0 => /lib/tls/libpthread.so.0 (0xb60ac000)
libdl.so.2 => /lib/libdl.so.2 (0xb60a9000)
libc.so.6 => /lib/tls/libc.so.6 (0xb5f71000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0xb75eb000)

En otro caso a la hora de ejecutar nos saltaria un mensaje de error indicando que no encuentra tal o cual libreria.

Otra cosa, al ejecutar nos dara un error de ClassNotFoundException:

./migrar -file migrar.cnf -verbose
[Migracion] [main] : activado trazas del proceso (verbose)
[Migracion] [imprimirParametros] : SOURCE_DRIVER: oracle.jdbc.driver.OracleDriver
[Migracion] [imprimirParametros] : TARGET_DRIVER: oracle.jdbc.driver.OracleDriver
[Migracion] [migrar] : @obtener conexiones
java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver not found in gnu.gcj.runtime.SystemClassLoader{urls=[file:./], parent=gnu.gcj.runtime.ExtensionClassLoader{urls=[], parent=null}}

Para solucionarlo indicamos en el CLASSPATH la ruta al driver Jdbc utilizado:

export CLASSPATH=./ojdbc14_g.jar

Ahora ya funciona correctamente:

[Migracion] [migrar] : @obtener conexiones
[Migracion] [migrar] : conexion origen:oracle.jdbc.driver.OracleConnection@53ded8
[Migracion] [migrar] : conexion destino:oracle.jdbc.driver.OracleConnection@53de10
[Migracion] [migrar] : @Procesar tablas
[Migracion] [migrar] : Procesando tabla:SMT_APPLICATION...
[DatabaseUtil] [copyTable] : creando conexion con el origen...
[DatabaseUtil] [copyTable] : creando origen creada...
[DatabaseUtil] [copyTable] : creando conexion con el destino...

Genial!!!. ya podemos desarrollar aplicaciones java con acceso a base de datos y compilarlas de manera nativa en nuestra plataforma.

Comentarios»

1. Instalar gcj « Ubuntu Life - febrero 23, 2007

[…] Si te gusta el tema y quieres ver mas. mira: Compilacion nativa de codigo Java […]

edwin ajahuanca callisaya - octubre 31, 2011

muy interesante…..
pero una consulta cual es link de descarga de gcj
gracias………


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: