为什么GCJ找不到我导入的包中的类?

7

我希望将一个小型Java应用程序编译成Windows可执行文件。

这个应用程序非常小,只有一个主类,但它使用了Apache POI。

当我进行编译时,只要将POI Jar放入类路径参数中,一切都正常。

但是,在链接时,GCJ无法解析POI包中的类引用。所有的信息都像这样:

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

我需要做什么才能链接我的应用程序?


你是否尝试将Apache POI的jar文件实际包含在项目的lib文件夹中,而不是在编译时通过类路径进行外部链接? - amischiefr
尝试使用Sun JDK或OpenJDK了吗?如果其中任何一个可行,那么这只是GCJ中的一个错误。 - BalusC
1个回答

7

您需要将导入的Jars编译为单独的.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 

最后,通过引用库路径执行您的可执行文件。例如,可以通过shell脚本来实现:
#!/bin/sh
export LD_LIBRARY_PATH=./libs/:$LD_LIBRARY_PATH
exec ./MyJavaApp $*

2
我刚开始使用GCJ,发现这个答案非常有帮助。只想指出从我的经验来看,第一个命令也需要使用-fPIC - reve_etrange

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接