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

Dan*_*ski 6 java linker gcj

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

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

当我编译它时,一切正常,只要我将POI Jar放入类路径参数中.

但是当谈到链接时,GCJ无法解析POI包中的类的引用.消息都是这样的:

undefined reference tp 'org::apache::poi:hssf:usermodel:HSSFWorkbook::class$'
Run Code Online (Sandbox Code Playgroud)

为了链接我的申请,我该怎么办?

Pau*_*sma 5

您必须分别将导入的Jars编译到.so库中.确保--classpath在编译代码时编译库时同时提供Jars .

一个例子,我正在编译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 
Run Code Online (Sandbox Code Playgroud)

最后,通过引用库路径的shell脚本执行可执行文件.例如:

#!/bin/sh
export LD_LIBRARY_PATH=./libs/:$LD_LIBRARY_PATH
exec ./MyJavaApp $*
Run Code Online (Sandbox Code Playgroud)

  • 我刚开始使用 GCJ,发现这个答案非常有帮助。只是想注意,根据我目前的经验,第一个命令也需要`-fPIC`。 (2认同)