2009-07-23 9 views
6

Voglio compilare una piccola applicazione Java su un eseguibile di Windows.Perché GCJ non trova le classi dai miei pacchetti importati?

L'applicazione è molto piccola, solo una singola classe principale, ma utilizza POI Apache.

Quando lo compilo, tutto funziona correttamente, purché inserisca il POI Jar nell'argomento del percorso di classe.

Ma quando si tratta di collegamento, GCJ non può risolvere i riferimenti delle classi nel pacchetto POI. I messaggi sono tutti così:

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

Cosa devo fare per collegare la mia applicazione?

+0

Hai provato in realtà tra cui il file jar da Apache POI nella cartella lib del progetto anziché esternamente collegamento ad esso nel percorso di classe al momento della compilazione? – amischiefr

+0

Sì, lo stesso problema. –

+0

Provato con Sun JDK o OpenJDK? Se uno di loro funziona, allora è solo (di nuovo) un bug in GCJ. – BalusC

risposta

5

È necessario compilare i file jar importati nelle librerie .so separatamente. Assicurati di fornire i jar nello --classpath, entrambi durante la compilazione delle librerie mentre compili il tuo codice.

Un esempio, dove sto compilando la libreria crittografica 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 

Infine, eseguire il file eseguibile tramite uno script di shell che fa riferimento al percorso della libreria. Per esempio:

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

Ho appena iniziato a utilizzare GCJ e ho trovato estremamente utile questa risposta. Volevo solo notare che '-fPIC' è richiesto sia dal primo comando che dalla mia esperienza fino ad ora. –

Problemi correlati