You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

构建pdf2htmlEX自定义Docker镜像时遇gio/gio.h缺失致命错误

编译pdf2htmlEX时缺失gio/gio.h的问题

问题背景

pdf2htmlEX已长期无官方支持,最后正式版发布于2020年7月。仓库内有社区更新的Poppler和FontForge版本但未发布正式版。尝试通过Dockerfile构建自定义镜像,按官方提供的步骤执行,其余步骤均正常,但在执行buildPdf2htmlEX步骤时出现编译错误,提示缺少gio/gio.h文件。不过直接安装该应用的deb包可在Linux虚拟机(Ubuntu和Alpine)中正常运行。

使用的Dockerfile内容

FROM ubuntu:latest

RUN apt-get update && apt-get -y install \
bash \
git-all

WORKDIR /tmp

RUN git clone https://github.com/pdf2htmlEX/pdf2htmlEX

WORKDIR /tmp/pdf2htmlEX

ENV DEBIAN_FRONTEND=noninteractive

# These 9 steps equal with the ./buildScripts/buildInstallLocallyApt (I tried that one too)

RUN ./buildScripts/versionEnvs
RUN ./buildScripts/reportEnvs
RUN ./buildScripts/getBuildToolsApt
RUN ./buildScripts/getDevLibrariesApt
RUN ./buildScripts/getPoppler
RUN ./buildScripts/buildPoppler
RUN ./buildScripts/getFontforge
RUN ./buildScripts/buildFontforge
RUN ./buildScripts/buildPdf2htmlEX

编译错误信息

[ 22%] Building CXX object CMakeFiles/pdf2htmlEX.dir/src/HTMLRenderer/outline.cc.o
[ 25%] Building CXX object CMakeFiles/pdf2htmlEX.dir/src/HTMLRenderer/state.cc.o
[ 28%] Building CXX object CMakeFiles/pdf2htmlEX.dir/src/HTMLRenderer/text.cc.o
[ 31%] Building CXX object CMakeFiles/pdf2htmlEX.dir/src/BackgroundRenderer/BackgroundRenderer.cc.o
[ 34%] Building CXX object CMakeFiles/pdf2htmlEX.dir/src/BackgroundRenderer/SplashBackgroundRenderer.cc.o
[ 37%] Building CXX object CMakeFiles/pdf2htmlEX.dir/src/BackgroundRenderer/CairoBackgroundRenderer.cc.o
[ 40%] Building CXX object CMakeFiles/pdf2htmlEX.dir/src/util/const.cc.o
[ 42%] Building CXX object CMakeFiles/pdf2htmlEX.dir/src/util/encoding.cc.o
[ 45%] Building C object CMakeFiles/pdf2htmlEX.dir/src/util/ffw.c.o
In file included from /tmp/pdf2htmlEX/pdf2htmlEX/../fontforge/fontforge/baseviews.h:31,
from /tmp/pdf2htmlEX/pdf2htmlEX/src/util/ffw.c:17:
/tmp/pdf2htmlEX/pdf2htmlEX/../fontforge/inc/ffglib.h:33:10: fatal error: gio/gio.h: No such file or directory
33 | #include <gio/gio.h>
| ^~~~~~~~~~~
compilation terminated.
make[2]: *** [CMakeFiles/pdf2htmlEX.dir/build.make:286: CMakeFiles/pdf2htmlEX.dir/src/util/ffw.c.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:140: CMakeFiles/pdf2htmlEX.dir/all] Error 2
make: *** [Makefile:146: all] Error 2

可正常运行的deb包安装Dockerfile片段

RUN wget https://github.com/pdf2htmlEX/pdf2htmlEX/releases/download/v0.18.8.rc1/pdf2htmlEX-0.18.8.rc1-master-20200630-Ubuntu-bionic-x86_64.deb
RUN mv pdf2htmlEX-0.18.8.rc1-master-20200630-Ubuntu-bionic-x86_64.deb pdf2htmlEX.deb
RUN apt-get install -y ./pdf2htmlEX.deb

问题原因分析

  1. 依赖包缺失:gio/gio.h是GLib库的头文件,官方提供的getDevLibrariesApt脚本未包含GLib的开发包(libglib2.0-dev),而社区更新的FontForge版本新增了对GLib的依赖,导致编译时找不到该头文件。
  2. 系统版本差异:你使用的ubuntu:latest是较新版本(如Jammy Jellyfish),系统库版本远高于2020年deb包基于的Ubuntu Bionic,社区更新的FontForge在新系统上编译时引入了新的依赖项,但旧的构建脚本未同步更新。
  3. 预编译deb包的兼容性:官方发布的deb包是基于旧版本依赖构建的,已经打包了所有所需依赖(或当时的FontForge还未依赖GLib),因此直接安装可正常运行。

解决建议

  • 手动补充依赖:在Dockerfile中,执行getDevLibrariesApt之后添加安装命令:RUN apt-get install -y libglib2.0-dev
  • 匹配基础镜像版本:将基础镜像改为deb包对应的ubuntu:bionic,减少系统版本差异带来的依赖问题
  • 修改构建脚本:编辑buildScripts/getDevLibrariesApt脚本,加入libglib2.0-dev依赖包

内容的提问来源于stack exchange,提问作者KKI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 12:04:53