【问题标题】:Why doesn't GCJ find the classes from my imported packages?为什么 GCJ 从我导入的包中找不到类?
【发布时间】:2009-07-23 12:53:39
【问题描述】:

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

应用程序很小,只有一个主类,但它使用 Apache POI。

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

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

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

我必须做什么才能链接我的应用程序?

【问题讨论】:

  • 您是否尝试过在项目的 lib 文件夹中实际包含来自 Apache POI 的 jar 文件,而不是在编译时在类路径中外部链接到它?
  • 试过 Sun JDK 或 OpenJDK?如果其中任何一个有效,那么它只是(再次)GCJ 中的一个错误。

标签: java linker gcj


【解决方案1】:

您必须将导入的 Jars 分别编译到 .so 库中。确保在 --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 $*

【讨论】:

  • 我刚开始使用 GCJ,发现这个答案非常有帮助。只是想注意,根据我目前的经验,第一个命令也需要-fPIC
猜你喜欢
  • 2019-08-01
  • 1970-01-01
  • 2021-04-17
  • 1970-01-01
  • 2022-06-12
  • 2013-10-06
  • 2021-09-30
  • 1970-01-01
  • 2015-02-18
相关资源
最近更新 更多