ArchLinux上安装zathura-develop

 Linux  zathura  源码包 󰈭 1857字

起因是因为Zathura作为一款我很喜欢的使用键盘移动的PDF阅读器, 居然拥有如此糟糕的划词功能(Text Select), 其划词功能通过一个方框框选出一片区域, Zathura自动提取出其中的文本, 并自动复制到剪贴板, 看上去很美好但是存在两个问题:

  • 选区粒度粗, 不能做到精准到某个字符

  • 划词不准确, 有时候阅读PDF文章时, 框出来的内容要么会变得很多要么缺胳膊断腿

那么能否使其变得和Okular/Acrobat这类阅读器一样便利呢?

最开始希望自己阅读源码, 并尝试检索到对应的代码进行修改; 不过折腾了半天没法通过编译, 就懒得再折腾了.

不过后续开始在网上搜索, 看看有没有前辈对Zathura如此糟糕的功能提出改进, 意外地发现已经有相关的讨论, 甚至发现已经有人提了相关的issue, 并且有能人已经于3个月前提交了PR并成功merge到develop分支中, 不过archlinux源的zathura和zathura-pdf-mupdf等插件都远远过期了…

那么为了体验到如此fantastic的功能必须要编译一下最新的zathura源码, 至此动力更加强劲了, 又折回去重新开始编译zathura.

从源码包编译Zathura

官方有比较清楚的installation guide.

我们安装developer version, 首先是girara库, 由于archlinux此前为了安装zathura已经通过pacman安装过, 因而这里考虑沿用pacman下的girara.

随后安装zathura本体(与官网有一点不同):

1 $ git clone https://git.pwmt.org/pwmt/zathura.git
2 $ cd zathura
3 $ git checkout --track -b develop origin/develop
4 $ meson -Dprefix=/usr/ build
5 $ cd build
6 $ ninja
7 $ ninja install

官网直接通过meson build生成的系统默认居然会安装到/usr/local下的bin和lib等目录, 如果这样的话后续安装zathura-mupdf会报错Run-time dependency found: NO zathura (tried pkgconfig and cmake)

通过添加参数将其强制安装到/usr下的对应目录即可解决该问题.

然后安装plugins, zathura没有后端的plugin则无法解析任何文件, 这里我们只考虑PDF, 选用zathura-pdf-mupdf, 官网也有一些guide, 参考指令为:

1 $ git clone https://git.pwmt.org/pwmt/zathura-pdf-mupdf.git
2 $ cd zathura-pdf-mupdf
3 $ git checkout --track -b develop origin/develop
4 $ meson build
5 $ cd build
6 $ ninja
7 $ ninja install

不过遗憾的是并不能编译通过, 会报错找不到mupdf-thirdmupdf这个C的第三方库, 相应的mesion配置文件为:

 1...
 2mupdf = dependency('mupdf', required: false)
 3mupdfthird = cc.find_library('mupdf-third')
 4
 5...
 6
 7if not mupdf.found()
 8  # normal build of mupdf
 9  mupdf = cc.find_library('mupdf')
10  build_dependencies += [mupdf, mupdfthird]
11else
12
13...

这是因为首先还需要安装mupdf, 去mupdf官网找到后下载源码包, 该源码包用Makefile管理, 通过make install即可安装.

随后再次回头安装zathura-mupdf, 还是失败, 编译器告诉我们可能是库链接什么的问题.

回想到pwmt的guide中提到编译mupdf必须要加上-fPIC(在编译动态库时用于生成位置无关的代码)选项, 在Makefile的CFLAGS中添加后重新install, 最后即可成功安装zathura-mupdf.

划词效果

简直是太好了!

后记

有没有考虑转战Gentoo或者LFS呢?

问题出现

很快问题就出现了, 自己从源码安装果然还是有不少坑, 打开zathura就会这样:

1error: jpeg error: Wrong JPEG library version: library is 80, caller expects 90

好像PNG没有问题, 但是JPG就会像这样:

首先考虑安装libjpeg9库, 但是问题多多, 最初的尝试如下:

由于看到了BUG报告FS#34590 - [mupdf] mupdf-1.2 is building with the wrong libjpeg header, 开始尝试歪门邪道, 修改thirdparty libjpeg header为80, 不过新的报错为:

1error: jpeg error: JPEG parameter struct mismatch: library thinks size is 656, caller expects 632

记得有篇zhihu的人写的Wrong JPEG library version, 继续歪门邪道, 但有所不同. 我先尝试往里面加个int shit;, 变为:

1error: jpeg error: JPEG parameter struct mismatch: library thinks size is 656, caller expects 640

再次加2个shit, 一共3个shit, 变为648, em确实有struczt对齐的问题. 最后一共5个shit, 对齐了656, 但是报错:

1Application transferred too many scanlines

看起来果然不会这么容易. 又开始迷茫了.

不过不经意间又发现arch好像自己就有zathura-git和zathura-mupdf-git?? 火速搞起来.

中途甚至因为配置混乱的原因出现了报错, 太傻逼了….(置换反应):

1error: jpeg error: Wrong JPEG library version: library is 90, caller expects 80

将libjpeg.so.9相关全部移除, 卸载并重新下载,重新编译,重新安装:girara, zathura-git, zathura-pdf-mupdf-git.

至此兜兜转转又从from source到AUR了…. 不过zathura可以稳定运行了…

嗨! 这里是 rqdmap 的个人博客, 我正关注 GNU/Linux 桌面系统, Linux 内核, 后端开发, Python, Rust 以及一切有趣的计算机技术! 希望我的内容能对你有所帮助~
如果你遇到了任何问题, 包括但不限于: 博客内容说明不清楚或错误; 样式版面混乱等问题, 请通过邮箱 rqdmap@gmail.com 联系我!
修改记录:
  • 2023-05-29 23:05:14大幅重构了python脚本的目录结构,实现了若干操作博客内容、sqlite的助手函数;修改原本的文本数 据库(ok)为sqlite数据库,通过嵌入front-matter的page_id将源文件与网页文件相关联
  • 2023-05-08 21:44:36博客架构修改升级
  • 2023-02-16 21:18:36zathura-libjpeg问题解决
  • 2023-02-13 02:13:08ArchLinux上源码包安装zathura
ArchLinux上安装zathura-develop