2009-07-23 9 views
6

Quiero compilar una pequeña aplicación Java para un ejecutable de Windows.¿Por qué GCJ no encuentra las clases de mis paquetes importados?

La aplicación es muy pequeña, solo una clase principal, pero utiliza Apache POI.

Cuando lo compilo, todo funciona bien, siempre que coloque el POI Jar en el argumento de ruta de clase.

Pero cuando se trata de vincular, GCJ no puede resolver las referencias de las clases en el paquete de POI. Los mensajes son todos así:

undefined reference tp 'org::apache::poi:hssf:usermodel:HSSFWorkbook::class$' 

¿Qué debo hacer para vincular mi aplicación?

+0

¿Ha intentado realmente incluir el archivo jar de Apache POI en la carpeta lib del proyecto en lugar de vincularlo externamente en la ruta de clase en tiempo de compilación? – amischiefr

+0

Sí, el mismo problema. –

+0

¿Intentó con Sun JDK o OpenJDK? Si alguno de ellos funciona, entonces es simplemente (nuevamente) un error en GCJ. – BalusC

Respuesta

5

Debe compilar los Jars importados en las bibliotecas .so por separado. Asegúrese de proporcionar los Jars en el --classpath, tanto al compilar las bibliotecas como al compilar el código.

Un ejemplo, donde estoy compilar la biblioteca de criptografía de GNU:

gcj --classpath=source/:libs/gnu-crypto.jar -fjni -c libs/gnu-crypto.jar -o libs/gnu-crypto.o 
gcj -shared -fPIC -o libs/libgnu-crypto.o libs/gnu-crypto.o -o libs/libgnu-crypto.so 

Por último, ejecute el ejecutable a través de un script de shell referencia a la ruta de la biblioteca. Por ejemplo:

#!/bin/sh 
export LD_LIBRARY_PATH=./libs/:$LD_LIBRARY_PATH 
exec ./MyJavaApp $* 
+1

Acabo de empezar a usar GCJ y encontré esta respuesta extremadamente útil. Solo quería señalar que '-fPIC' también se requiere en el primer comando de mi experiencia hasta el momento. –

Cuestiones relacionadas