Ubuntu20.04下升级Gpgmepp至1.19+以适配Poppler及Okular签名
Ubuntu 20.04 升级Gpgmepp以完成Poppler 23.11编译
问题背景
- 系统:Ubuntu 20.04
- 需求:给Okular添加PDF数字证书签名,Okular要求Poppler版本至少21.01,但系统自带版本为0.86.1,因此需升级Poppler至23.11
- 报错卡点:编译Poppler时执行
cmake -DTESTDATADIR=./test -DCMAKE_INSTALL_MANDIR:PATH=/usr/local/share/man ..,提示找不到兼容1.19版本的Gpgmepp包配置文件 - 已尝试操作:
- 用
sudo apt-get install libgpgmepp-dev仅能安装1.13.1版本,不满足要求 - 下载并运行最新GnuPG Desktop AppImage,cmake报错依旧
- 当前
gpg2 --version输出为:gpg (GnuPG) 2.2.19
- 用
解决方案1:从源码编译安装Gpgmepp 1.19+
Gpgmepp是Gpgme的C++绑定,需先编译安装符合版本要求的Gpgme,再确保Gpgmepp被正确编译:
- 安装编译依赖
sudo apt-get update sudo apt-get install build-essential libassuan-dev libgpg-error-dev libksba-dev libnpth-dev autoconf automake libtool pkg-config
- 下载Gpgme源码(以1.22.0为例,可替换为更高兼容版本)
cd ~/Downloads wget https://gnupg.org/ftp/gcrypt/gpgme/gpgme-1.22.0.tar.bz2 tar -xf gpgme-1.22.0.tar.bz2 cd gpgme-1.22.0
- 配置编译选项(必须启用C++绑定才能生成Gpgmepp)
./configure --prefix=/usr/local --enable-languages=c,c++
说明:
--prefix=/usr/local指定安装到系统本地目录,避免覆盖系统自带旧版本;--enable-languages=c,c++确保同时编译C和C++版本的库
- 编译并安装
make -j$(nproc) sudo make install sudo ldconfig
- 验证安装结果
pkg-config --modversion gpgmepp
输出为1.19及以上版本即表示安装成功
- 重新编译Poppler
回到Poppler源码目录,先清理之前的cmake缓存,再重新执行cmake命令:
cd /path/to/poppler-source rm -rf CMakeCache.txt CMakeFiles cmake -DTESTDATADIR=./test -DCMAKE_INSTALL_MANDIR:PATH=/usr/local/share/man -DGPGMEPP_LIBRARY=/usr/local/lib/libgpgmepp.so -DGPGMEPP_INCLUDE_DIR=/usr/local/include/gpgmepp .. make -j$(nproc) sudo make install
若cmake仍无法自动识别,可通过
-DGPGMEPP_LIBRARY和-DGPGMEPP_INCLUDE_DIR手动指定路径
解决方案2:使用第三方PPA升级Gpgmepp(可选)
部分第三方PPA可能提供Ubuntu 20.04的Gpgmepp高版本包,可尝试以下步骤:
- 添加PPA(注意:第三方PPA可能存在稳定性风险,谨慎使用)
sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt-get update
- 尝试安装更新版本的libgpgmepp-dev
sudo apt-get install libgpgmepp-dev
若该PPA提供的版本仍低于1.19,建议优先选择源码编译方案
额外注意事项
- 编译完成后,验证Poppler版本是否符合要求:
pkg-config --modversion poppler
- 若Okular仍无法识别新的Poppler,可尝试重新编译Okular,或用
LD_LIBRARY_PATH=/usr/local/lib okular临时指定库路径启动Okular
内容的提问来源于stack exchange,提问作者Jocelyne Sze
相关产品推荐
相关产品推荐

