2009-07-23 3 views
6

Я хочу скомпилировать небольшое приложение Java в исполняемый файл Windows.Почему GCJ не находит классы из моих импортированных пакетов?

Приложение очень маленькое, только один основной класс, но использует Apache POI.

Когда я скомпилирую его, все работает нормально, пока я помещаю POI Jar в аргумент path пути.

Но когда дело доходит до ссылки, GCJ не может разрешить ссылки на классы в пакете POI. Все сообщения таковы:

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

Что мне нужно сделать, чтобы связать мое приложение?

+0

Вы пробовали на самом деле в том числе файл фляги от Apache POI в Lib папку проекта, а не извне ссылки на него в классе пути во время компиляции? – amischiefr

+0

Да, та же проблема. –

+0

Пробовал с Sun JDK или OpenJDK? Если любой из них работает, то это просто (опять же) ошибка в GCJ. – BalusC

ответ

5

Вы должны скомпилировать импортированные банки в библиотеки .so отдельно. Обязательно укажите Jars в --classpath, как при компиляции библиотек, так и при компиляции кода.

примера, где я компиляция крипто библиотеки 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 

Наконец, выполнить свой исполняемый файл через скрипт, ссылающийся на пути к библиотеке. Например:

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

Я только начал использовать GCJ и нашел этот ответ чрезвычайно полезным. Просто хотел отметить, что '-fPIC' требуется и для первой команды, и из моего опыта. –