【问题标题】:Apache POI missing dynamic library libfreetype.soApache POI 缺少动态库 libfreetype.so
【发布时间】:2016-03-11 03:57:26
【问题描述】:

我使用 Apache POI 编写电子表格。有问题的行是我调用Sheet#autoSizeColumn(int column) 的地方。如果我在没有图形环境的 unix shell 上运行它,会出现以下异常:

Exception in thread "Thread-3" java.lang.UnsatisfiedLinkError: /usr/pkg/java/openjdk7/jre/lib/amd64/xawt/libmawt.so: Shared object "libXext.so.7" not found

根据apache's quick guide,应该设置一个属性来表示无头环境,所以我尝试以下调用:

 java -jar -Xmx200m -Djava.awt.headless=true myJar.jar

但是我得到了同一行的另一个例外:

Exception in thread "Thread-3" java.lang.UnsatisfiedLinkError: /usr/pkg/java/openjdk7/jre/lib/amd64/libfontmanager.so: Shared object "libfreetype.so.7" not found

上面的 apache 指南还说“我应该确保我在您的工作簿中使用的字体可用于 Java”。我真的不使用任何特定的字体,我对字体做的唯一一件事就是

XSSFFont boldFont = (XSSFFont) wb.createFont();
boldFont.setBold(true);
titleRowStyle.setFont(boldFont);

unix shell 运行

openjdk version "1.7.0-internal"
OpenJDK Runtime Environment (build 1.7.0-internal-pkgsrc_2015_01_06_05_56-b00)
OpenJDK 64-Bit Server VM (build 24.71-b01, mixed mode)

NetBSD *** 6.1.5 NetBSD 6.1.5 (jajo) #1: Sun Jun 21 09:13:03 UTC 2015  spaj@***:/usr/src/sys/arch/amd64/compile/jajo amd64

这个问题可以解决吗?

【问题讨论】:

  • 你是如何安装JVM的?是从包裹里拿出来的吗?您是否跳过了任何依赖项?你有安装freetype吗?
  • 我不是目标机器的管理员,所以很遗憾我无法为您提供有关 JVM 安装的详细信息。 Freetype 似乎已安装,因为freetype-config 可用。
  • 您可能需要在该机器上安装缺少的库才能使其正常工作。
  • @centic 是否可以以非 root 用户身份执行此操作?
  • 通常这将需要 root 访问权限,因为安装这些会添加系统库。您可以尝试在用户目录中的某个位置手动安装它们并调整 LD_LIBRARY_PATH 以包含这些,但这听起来像是一个非常常见的库的 hack,通常需要安装完整的 Java JRE。

标签: java apache-poi headless netbsd


【解决方案1】:

我在系统中发现了一个较旧的库版本:

bash-4.3$ find /usr -name "libfreetype.*"
find: /usr/games/hide: Permission denied
/usr/pkg/lib/libfreetype.la
/usr/pkg/lib/libfreetype.a
/usr/pkg/lib/libfreetype.so
/usr/pkg/lib/libfreetype.so.6
/usr/pkg/lib/libfreetype.so.6.11.3

然后我为最新的可用版本创建了一个符号链接,就好像它是版本 7:

ln -s /usr/pkg/lib/libfreetype.so.6.11.3 ~/tmp/lib/libfreetype.so.7

现在开始我的带有环境变量的 jar 文件:

LD_LIBRARY_PATH=~/tmp/lib java -jar -Xmx200m -Djava.awt.headless=true myJar.jar

【讨论】:

    【解决方案2】:

    我遇到了类似的问题。 Danny's answer 为我指明了正确的方向。基本上,如果应用位于 Tomcat Docker 容器内,请确保您没有使用 slim 版本。

    使用tomcat:9.0.24-jdk11-openjdk-slimfind /usr -name libfreetype.* 表明FreeType libfreetype 未包含在JVM 中。将基础镜像更新为 tomcat:9.0.24-jdk11-openjdk 解决了这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-15
      • 2020-07-12
      • 1970-01-01
      • 1970-01-01
      • 2019-02-11
      相关资源
      最近更新 更多