构建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
问题原因分析
- 依赖包缺失:
gio/gio.h是GLib库的头文件,官方提供的getDevLibrariesApt脚本未包含GLib的开发包(libglib2.0-dev),而社区更新的FontForge版本新增了对GLib的依赖,导致编译时找不到该头文件。 - 系统版本差异:你使用的
ubuntu:latest是较新版本(如Jammy Jellyfish),系统库版本远高于2020年deb包基于的Ubuntu Bionic,社区更新的FontForge在新系统上编译时引入了新的依赖项,但旧的构建脚本未同步更新。 - 预编译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
相关产品推荐
相关产品推荐

