libreoffice 01 windows 版本编译

589 阅读4分钟

01 基本信息

目前office开源版本主流是 libreoffice。其前身是openoffice。 官网:zh-cn.libreoffice.org/ wiki: wiki.documentfoundation.org/ windows 版编译说明: wiki.documentfoundation.org/Development… 发布版本下载地址: www.libreoffice.org/download/do…

关于类图文档docs.libreoffice.org/sw/html/ann… 比如:在页面搜索SwFrame,可以得到如下详细类图及类关系: 官方类图及类关系

一个比较古老的关于OpenOffice 的中文介绍: OpenOffice.org简介 OpenOffice.org技术架构 OpenOffice.org中的XML应用

一个比较古老的介绍uno的文档:wiki.openoffice.org/wiki/UNO_re…

这个 IDE 的配置方法:wiki.documentfoundation.org/Development…

libreoffice的国际化技术

www.cnblogs.com/linux-wang/…

02 win 版本libreoffice编译方法

参照官网: 使用 Cygwin 和 MSVC 在 Windows 上构建 LibreOffice:提示和技巧

02.01 vs2019及必要组件

vs2019 社区版、专业版、企业版均可。只要安装下列必要组件即可。

MSVC v142 - VS 2019 C++ x64/x86 build tools (v14.2x) C++ core features Windows 10 SDK (10.0.xxxxx.x) Windows Universal C Runtime C++ ATL for v142 build tools (x86 & x64) .NET Framework 4.x.x SDK C++ Clang Compiler for Windows (9.0.0)

建议安装英文语言支持。

02.02 安装jdk

adoptopenjdk.net/archive.htm…

windows 64位: github.com/AdoptOpenJD…

windwos32位github.com/AdoptOpenJD…

02.03 安装cygwin 64位版本

下载并安装setup-x86_64.exe

注意:对于 libreoffice 7.0.4.2 版本,可能会编译不过。建议使用 libreoffice 7.1版本源码编译。libreoffice7.0.4.2版本,需要使用老版本的cygwin才可以编译通过,20210329日之前的。

对于3月29日后的cygwin64位版本编译libreoffice可能会出现 libgpg-error 错误,参考: wiki.documentfoundation.org/Development…

参考libreoffice中文论坛上的帖子:有没有在win10上编译通过的

用管理员权限启动cmd窗口,运行setup-x86_64.exe

注意:管理员权限cmd窗口,不是PowerShell

安装路径:`D:\cygwin64`
setup-x86_64.exe -P autoconf -P automake -P bison -P cabextract -P doxygen -P flex -P gcc-g++ ^
  -P gettext-devel -P git -P gnupg -P gperf -P make -P mintty ^
  -P nasm -P openssh -P openssl -P patch -P perl -P python -P python3 ^
  -P pkg-config -P rsync -P unzip -P vim -P wget -P zip -P perl-Archive-Zip ^
  -P perl-Font-TTF -P perl-IO-String

建议安装时,保留下载的cygwin安装包到本地。并且安装、编译成功后,保存本地cygwin安装包。以备不时之需。

02.04 指定更新依赖目录

libreoffice 编译时,会下载很多依赖文件。需要指定一个依赖存放目录。 该测试中 在代码同级的 libo-core-buildtools 目录中。

e:\git\libreoffice\libo-core-buildtools # 存放依赖包文件夹
e:\git\libreoffice\libo-core # 存放libreoffice源码目录
e:\cygwin64  # cygwin 安装目录

02.05 git 配置

下列配置项在 windows 和 cygwin 中都设置

:: 设置不转换换行符
git config --global core.safecrlf false
git config --global core.autocrlf false
::设置不忽略大小写
git config --global core.ignorecase false
::设置HTTP仓库不用每次输入账户密码
git config --global credential.helper store

:: 下载代码
git clone --recursive https://gerrit.libreoffice.org/core.git libo-core
:: 切换到当前稳定分支libreoffice-7-1-3
git checkout -b b7.1.3 origin/libreoffice-7-1-3

02.06 安装ant和junit

mkdir -p /cygdrive/e/libreoffice/libo-core-buildtools
cd /cygdrive/e/cygdrive/e/libreoffice/libo-core-buildtools
wget https://archive.apache.org/dist/ant/binaries/apache-ant-1.9.5-bin.tar.bz2
tar -xjvf apache-ant-1.9.5-bin.tar.bz2
wget http://downloads.sourceforge.net/project/junit/junit/4.10/junit-4.10.jar

02.07 安装GNU make

mkdir -p /opt/lo/bin
cd /opt/lo/bin
wget http://dev-www.libreoffice.org/bin/cygwin/make-4.2.1-msvc.exe
mv make-4.2.1-msvc.exe make.exe

02.08 设置环境变量 VSDEVCMD

VSDEVCMD=C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\Tools\VsDevCmd.bat

02.08 生成工程文件

cd /cygdrive/e/git/libreoffice/libo-core
mkdir buildx64 && cd buildx64
/cygdrive/e/git/libreoffice/libo-core/autogen.sh --with-external-tar=/cygdrive/e/git/libreoffice/libo-core-buildtools/lo-externalsrc \
--with-junit=/cygdrive/e/git/libreoffice/libo-core-buildtools/junit-4.10.jar \
--with-jdk-home=/cygdrive/d/install/Java/jdk-16.0.1 \
--with-ant-home=/cygdrive/d/install/eclipse/apache-ant-1.10.10 \
--with-visual-studio=2019 \
--disable-dependency-tracking \
--enable-pch \
--disable-ccache \
--without-ucrt-dir \
--with-lang=zh-CN \
--enable-symbols \
--host=x86_64-pc-cygwin \
--enable-debug \
--with-distro=LibreOfficeWin64

02.09 编译

:: cd /cygdrive/e/git/libreoffice/libo-core/buildx64
/opt/lo/bin/make build-nocheck gb_COLOR=1

02.10 生成vs工程文件

:: cd /cygdrive/e/git/libreoffice/libo-core/buildx64
/opt/lo/bin/make vs2019-ide-integration
:: 设置 Executable soffice_exe 为vs2019的默认启动项

libreoffice7.1.3 vs2019工程

03 关于 libreoffice的国际化

libreoffice的国际化使用gettext工具集。

gettext是一套工具集的名称。这套工具集包含 xgettext/msginit/msgfmt 等一套建立模版(POT)、创建PO文件和编译MO文件的工具。

参考:关于操作系统中英文切换的.po和.mo介绍 www.cnblogs.com/linux-wang/…

例子: 比如:我们发现一个弹出窗口字符串

xxxx yyyy zzzzz

以上内容中文简体,到 源码的 translations\source\zh-CN 目录查找, 发现中文字符串在 yyyy 在 translations\source\zh-CN\desktop\messages.po

继而找到直接依赖字符串 // 代码中的直接依赖 desktop\inc\strings.hrc

如果要修改其他语言的该字符串内容,即可到对应 translations\source\XXX 下面去找,xxx即为感兴趣的语言目录。

04 关于libreoffice多进程启动

libreoffice 7.0.4 避免多重启动使用的是 PipeIpcThread,但是到7.1中,已经把PipeIpcThread取消掉了。

libreoffice支持每个应用一个进程的方式启动。具体如下:

::如果指定word、excel、ppt的环境变量即可开多个进程
:: 开word
soffice.exe -env:UserInstallation="file:///C:/TEMP/tempOffice1" -writer
:: 开excel
soffice.exe -env:UserInstallation="file:///C:/TEMP/tempOffice2" -calc
:: 开ppt
soffice.exe -env:UserInstallation="file:///C:/TEMP/tempOffice3" -impress

这样每个应用一个窗口,一般 -env:UserInstallation 参数相同,会放到一个进程中运行。