Java 为什么';GCJ是否从我导入的包中找到类?

Java 为什么';GCJ是否从我导入的包中找到类?,java,linker,gcj,Java,Linker,Gcj,我想将一个小型Java应用程序编译成Windows可执行文件 应用程序非常小,只有一个主类,但它使用ApachePOI 当我编译它时,只要我将POI Jar放入类path参数中,一切都可以正常工作 但在链接方面,GCJ无法解析POI包中类的引用。这些信息都是这样的: undefined reference tp 'org::apache::poi:hssf:usermodel:HSSFWorkbook::class$' 要链接我的应用程序,我必须做什么?您必须将导入的JAR编译成。因此库是分开

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

应用程序非常小,只有一个主类,但它使用ApachePOI

当我编译它时,只要我将POI Jar放入类path参数中,一切都可以正常工作

但在链接方面,GCJ无法解析POI包中类的引用。这些信息都是这样的:

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

要链接我的应用程序,我必须做什么?

您必须将导入的JAR编译成
。因此
库是分开的。确保在编译库时和编译代码时在
--classpath
中提供JAR

例如,我正在编译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 $*

您是否尝试过在项目的lib文件夹中包含来自apachepoi的jar文件,而不是在编译时在类路径中外部链接到它?是否尝试过sunjdk或OpenJDK?如果它们中的任何一个都能工作,那么它只是(再次)GCJ中的一个bug。我刚开始使用GCJ,发现这个答案非常有用。我只是想指出,根据我目前的经验,第一个命令也需要使用
-fPIC