如何编译 LibreOffice

一、安装编译环境依赖
$ sudo dnf builddep libreoffice
$ sudo. dnf install. ccache # 安装 ccache,从而能够在重新编译时复用之前编译的缓存以加速编译。您也可以不用ccache$ ccache -M 10G # 将 ccache 缓存大小限制设置为 10G$ ccache –set-config=cache_dir=# 若空间不足,可将 ccache 的缓存目录设置为其他的位置(比如挂载的其他分区目录)$ sudodnf installpatch avahi-devel # builddep 没有安装好这两个编译依赖的包$ sudodnf installfakeroot rpm-build # 若您需要 rpm 或 deb 格式的安装包,则需要安装这两个依赖项
二、克隆源代码及子模块(git clone)
首先克隆主代码。此处克隆 libreoffice-7-1 分支。克隆时,因为我只需要最新的源代码(不需要历次的所有commit),因此使用了depth=1选项。
$ gitclone –depth=1–branch libreoffice-7-1 git://go.suokunlong.cn/lo/core ./libreoffice-7-1
正克隆到 ‘./libreoffice-7-1’…
remote: 枚举对象: 120360, 完成.
remote: 对象计数中: 100% (120360/120360), 完成.
remote: 压缩对象中: 100% (86011/86011), 完成.
remote: 总共 120360(差异 46040),复用 87907(差异 32504)
接收对象中: 100% (120360/120360), 272.72MiB |9.36MiB/s, 完成.
处理 delta 中: 100% (46040/46040), 完成.
正在更新文件: 100% (120889/120889), 完成.
然后,配置子模块。若不进行如下配置,则若启用中文用户界面选项,会默认去git.libreoffice.org克隆子模块代码,速度较慢并且无法观察克隆进展:
$ cdlibreoffice-7-1/
$ gitsubmodule init
子模组 ‘dictionaries’(https://git.libreoffice.org/dictionaries)已对路径 ‘dictionaries’注册
子模组 ‘helpcontent2’(https://git.libreoffice.org/help)已对路径 ‘helpcontent2’注册
子模组 ‘translations’(https://git.libreoffice.org/translations)已对路径 ‘translations’注册
我们编译时只需要 translations 子模块,没有启用帮助及词典,因此到 .git/config 中将 dictionaries 和 helpcontent2 两个子模块删除。然后,将translations模块的url修改为国内镜像地址(比如 git://go.suokunlong.cn/lo/translations),以加快克隆速度。
然后,抓取子模块。此处使用 –depth=1 选项以只获取最新的翻译字符串,并且使用 –progress 选项以显示克隆进展。
$ gitsubmodule update –progress –depth=1正克隆到 ‘/home/suokunlong/build/lo/libreoffice-7-1/translations’…
remote: 枚举对象: 45290, 完成.
remote: 对象计数中: 100% (45290/45290), 完成.
remote: 压缩对象中: 100% (11030/11030), 完成.
remote: 总共 45290(差异 22278),复用 37455(差异 14997)
接收对象中: 100% (45290/45290), 107.72MiB |7.20MiB/s, 完成.
处理 delta 中: 100% (22278/22278), 完成.
remote: 总共 0(差异 0),复用 0(差异 0)
remote: 枚举对象: 14403, 完成.
remote: 对象计数中: 100% (14403/14403), 完成.
remote: 压缩对象中: 100% (3316/3316), 完成.
remote: 总共 11565(差异 5892),复用 9773(差异 4229)
接收对象中: 100% (11565/11565), 89.61MiB |3.06MiB/s, 完成.
处理 delta 中: 100% (5892/5892), 完成 155个本地对象.
来自 git://go.suokunlong.cn/lo/translations

  • branch 4a12b40c8751323705d82539be43d04990f934a9 ->FETCH_HEAD
    子模组路径 ‘translations’:检出 ‘4a12b40c8751323705d82539be43d04990f934a9’
    最后,获取 external_tarballs. 这是 libreoffice 在编译时使用的第三方库等包,默认是从境外服务器去抓取,速度很慢。我已将常用的包放在了境内服务器,您需要从以下位置下载。可以使用下载器一次性全部下载,或者在下面的 make 阶段根据终端输出再去仅下载需要的文件。下载的文件请放置到下列autogen.input中设定的路径下。
    https://go.suokunlong.cn:88/dl/libreoffice/external_tarballs/
    三、配置编译选项(autogen.input)
    你可以不指定编译选项,直接按照下一部分介绍的 autogen.sh命令生成makefile,这样做就会按照默认的编译选项进行。你也可以将编译选项作为autogen.sh运行时的参数传递给它,这种情况下就会使用命令行参数作为编译选项。
    但最方便的是通过autogen.input来设置编译选项。这个文件仅在不存在任何命令行参数时才会生效。在克隆的源代码根目录下建立 autogen.input 文件,内容如下。完整的编译配置选项及其含义,见源代码根目录下的configure文件。

我一般直接在线浏览帮助文档,因此将帮助禁用了–without-help

–without-helppack-integration

启用简体及繁体中文用户界面–with-lang=zh-CN zh-TW

自己编译的话在线更新及崩溃报告功能就没啥用了,禁用–disable-online-update

–disable-breakpad

禁用 Office Development Kit。若启用 ODK,则额外需要doxygen依赖项。–disable-odk

–without-doxygen

若编译好之后您需要rpm (或deb)包,则需要启用下列两项:–enable-epm

–with-package-format=rpm

若您需要在多个不同版本的编译之间共享external_tarballs第三方源代码包,则可设置下列选项:# –with-external-tar=# 现在很多功能都用不到java了,因此我直接将其禁用–without-java

我需要用到firebird数据库,因此启用–enable-firebird-sdbc

–without-system-firebird
–enable-python=internal
四、编译(autogen.sh && make)
在源代码根目录下运行 autogen.sh。该脚本会调用 autogen.input中定义的编译选项。
./autogen.sh
若提示缺少某个包,则很可能是需要手动安装这个包的devel版本。若看到如下的提示,则表示autogen.sh运行无错误:


To build, run:
/usr/bin/make
To view some help, run:
/usr/bin/make helpAfter the build has finished successfully, you can immediately run what you built using the command:
instdir/program/soffice
If you want to run the smoketest, run:
/usr/bin/make check


此时就可以运行 make 命令进行编译了:
make
此时,若提示正在从 dev-www.libreoffice.org 下载各种包,但墙内速度很慢的情况下,可以按下 Ctrl-C键中断,然后手动从我的墙内缓存链接下载,并放入 –with-external-tar 编译选项指定的目录。也可以从其他任何地方下载,比如提示下载 Python-3.7.7.tar.xz 时也可以从 http://npm.taobao.org/mirrors/python/3.7.7/ 下载。
编译比较耗时。按照官方wiki上的说法,首次编译大约耗时约 = 8小时 / cpu核心数,后续更改源代码后增量编译耗时从几秒钟到几小时不等,取决于代码更改的程度。若需要频繁重新编译,则安装ccache包是个不错的选择,autogen.sh若检测到你安装了ccache则会自动启用。你也可以用icecream等分布式编译方式加速编译。
编译完成后,执行 .instdir/program/soffice 即可运行。若在autogen.input 中启用了 “–with_package_format=rpm deb” ,则生成的安装包在 workdir/installation中。

百度大模型

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

腾讯云图