Perché GCJ non trova le classi dei miei pacchetti importati?
Domanda
Voglio compilare una piccola applicazione Java in un eseguibile di Windows.
L'applicazione è molto piccolo, solo una singola classe principale, ma utilizza Apache POI.
Quando compilo esso, tutto funziona bene, fino a quando ho messo il vaso POI nella discussione percorso di classe.
Ma quando si tratta di collegamento, GCJ non può risolvere i riferimenti alle classi del pacchetto POI. I messaggi sono tutti come questo:
undefined reference tp 'org::apache::poi:hssf:usermodel:HSSFWorkbook::class$'
Che cosa devo fare per collegare la mia domanda?
Soluzione
Si deve compilare i barattoli importati in librerie .so
separatamente. Assicurati di fornire i vasetti nel --classpath
, sia durante la compilazione della librerie durante la compilazione del 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. Ad esempio:
#!/bin/sh
export LD_LIBRARY_PATH=./libs/:$LD_LIBRARY_PATH
exec ./MyJavaApp $*