在国产麒麟v10 ARM服务器上,我花了一下午编译LibreOffice 7.1.8.1,这是最全的避坑实录
在国产麒麟v10 ARM服务器上编译LibreOffice 7.1.8.1的完整避坑指南
那天下午的阳光透过办公室的窗户斜射进来,我盯着眼前这台搭载麒麟v10操作系统的ARM服务器,心想:"不就是编译个LibreOffice吗?"六个小时后,当我终于看到soffice --version成功输出7.1.8.1版本号时,才意识到这次编译之旅远比想象中复杂。本文将分享我在华为鲲鹏920芯片的国产服务器上编译LibreOffice的全过程,特别是那些官方文档没提到的"坑"和解决方案。
1. 环境准备:比想象中更复杂的依赖迷宫
麒麟v10作为国产操作系统的代表,其软件生态与常见的CentOS或Ubuntu存在显著差异。在开始编译前,我发现至少需要解决三个关键问题:依赖包完整性、网络访问限制和ARM架构适配。
1.1 系统基础依赖安装
首先需要确保系统具备完整的编译工具链。与x86环境不同,ARM架构下的某些依赖包需要特别注意:
# 基础编译环境
sudo yum install -y "@Development Tools"
# ARM架构特有依赖
sudo yum install -y libatomic.aarch64 libquadmath.aarch64
注意:麒麟v10的yum源可能缺少部分标准包,建议先执行
sudo yum update更新源数据
依赖安装过程中我遇到了几个典型问题:
-
缺失的字体库:编译时需要的中文字体在默认源中不存在,需要手动添加:
sudo yum install -y wqy-microhei-fonts wqy-zenhei-fonts -
Python版本冲突:系统预装的Python3.6不符合要求,需要升级:
sudo yum install -y python38 python38-devel sudo alternatives --set python /usr/bin/python3.8
1.2 源码下载与解压技巧
LibreOffice官方源码包较大(约200MB),在国产服务器上下载可能遇到速度慢的问题。我推荐使用国内镜像:
wget https://mirrors.ustc.edu.cn/libreoffice/src/7.1.8/libreoffice-7.1.8.1.tar.xz
tar -xvf libreoffice-7.1.8.1.tar.xz -C /opt
解压后立即面临权限问题。由于后续编译需要使用非root用户,建议提前设置:
sudo useradd -m builder
sudo chown -R builder:builder /opt/libreoffice-7.1.8.1
2. 预编译配置:那些官方文档没告诉你的参数
进入源码目录后,./autogen.sh是编译前的关键步骤。在ARM架构下,以下参数组合经过多次测试最为稳定:
cd /opt/libreoffice-7.1.8.1
sudo -u builder ./autogen.sh \
--without-java \
--with-lang=zh-CN \
--disable-postgresql-sdbc \
--disable-fetch-external \
--with-package-format=rpm \
--enable-epm \
--host=aarch64-linux-gnu \
--build=aarch64-linux-gnu
几个关键参数的解释:
| 参数 | ARM架构下的特殊意义 | 推荐值 |
|---|---|---|
| --host/--build | 明确指定交叉编译目标 | aarch64-linux-gnu |
| --disable-fetch-external | 避免编译时自动下载外部依赖 | 必须禁用 |
| --with-lang | 中文环境支持 | zh-CN |
重要提示:务必添加
--disable-fetch-external,否则编译过程中会尝试从国外下载资源,极易失败
3. 编译过程:耐心与技巧的考验
预配置成功后,真正的挑战才开始。在ARM服务器上编译LibreOffice平均需要3-5小时(视CPU性能而定),期间可能遇到以下问题:
3.1 内存不足的解决方案
即使使用16核鲲鹏920处理器,编译过程中仍可能出现内存不足导致进程被kill。解决方法:
-
减少并行编译线程:
make -j4 # 改为4线程 -
增加swap空间:
sudo fallocate -l 8G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile
3.2 依赖包手动安装
由于网络限制,编译时可能卡在某个模块。常见需要手动处理的依赖:
-
harfbuzz:下载源码手动编译
wget https://github.com/harfbuzz/harfbuzz/releases/download/2.8.1/harfbuzz-2.8.1.tar.xz tar xf harfbuzz-2.8.1.tar.xz && cd harfbuzz-2.8.1 ./configure --prefix=/usr/local && make -j4 && sudo make install -
nss:需要特定版本
sudo yum install -y nss-devel-3.53.1
3.3 ARM架构特有的编译错误
在链接阶段可能遇到如下错误:
undefined reference to `__atomic_load_8'
解决方法是指定链接库:
export LDFLAGS="-latomic"
make clean
make
4. 验证与打包:最后的检查清单
编译完成后,不要急于庆祝,先进行完整验证:
4.1 基础功能测试
cd /opt/libreoffice-7.1.8.1
./instdir/program/soffice --version
./instdir/program/soffice --headless --convert-to pdf test.docx
4.2 RPM包生成
如果预配置时指定了--with-package-format=rpm,可以生成安装包:
cd workdir/installation
ls *.rpm # 查看生成的rpm包
4.3 环境变量配置
为方便使用,建议添加以下环境变量:
echo 'export PATH=$PATH:/opt/libreoffice-7.1.8.1/instdir/program' >> ~/.bashrc
source ~/.bashrc
5. 性能优化与长期维护
成功编译只是开始,要让LibreOffice在ARM服务器上稳定运行,还需要:
-
字体缓存优化:
fc-cache -fv -
内存管理:在
/etc/security/limits.conf中添加:* soft nofile 65535 * hard nofile 65535 -
定期更新:订阅国内开源镜像站,获取安全更新
经过这次折腾,我总结出ARM服务器编译软件的三个黄金法则:提前规划依赖、耐心处理错误、详细记录过程。现在,这台国产服务器上的LibreOffice已经稳定运行了三个月,处理了上千份文档转换任务。
更多推荐

所有评论(0)