分类
代码开发

如何编译 LibreOffice

本文介绍了在 Fedora linux 操作系统下从源代码编译 LibreOffice 并启用中文用户界面的方法。

(于2021-05-22针对最新编译问题进行了更新,在Fedora 33下测试通过)

一、安装编译环境依赖

$ sudo dnf builddep libreoffice

$ sudo dnf install ccache  # 安装 ccache,从而能够在重新编译时复用之前编译的缓存以加速编译。您也可以不用ccache
$ ccache -M 10G  # 将 ccache 缓存大小限制设置为 10G
$ ccache --set-config=cache_dir=</path/to/ccache_dir> # 若空间不足,可将 ccache 的缓存目录设置为其他的位置(比如挂载的其他分区目录)

$ sudo dnf install patch avahi-devel  # builddep 没有安装好这两个编译依赖的包
$ sudo dnf install fakeroot rpm-build # 若您需要 rpm 或 deb 格式的安装包,则需要安装这两个依赖项

二、克隆源代码及子模块(git clone)

首先克隆主代码。此处克隆 libreoffice-7-1 分支。克隆时,因为我只需要最新的源代码(不需要历次的所有commit),因此使用了depth=1选项。

$ git clone --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.72 MiB | 9.36 MiB/s, 完成.
处理 delta 中: 100% (46040/46040), 完成.
正在更新文件: 100% (120889/120889), 完成.

然后,配置子模块。若不进行如下配置,则若启用中文用户界面选项,会默认去git.libreoffice.org克隆子模块代码,速度较慢并且无法观察克隆进展:

$ cd libreoffice-7-1/
$ git submodule 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 选项以显示克隆进展。

$ git submodule 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.72 MiB | 7.20 MiB/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.61 MiB | 3.06 MiB/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=<external_tarballs文件夹路径>

# 现在很多功能都用不到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 help

After 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中。

常见错误解决

1. configure: error: The missing Perl modules are: FindBin

解决:安装perl的FindBin包,一般情况下你的Linux发行版包管理器中已经有现成的:$ sudo dnf install perl-FindBin

2. configure: error: could not find function ‘com_err’ required for Kerberos 5

$ sudo apt-get install libkrb5

3. _crypt.cpython-3.8.so has suspicious NEEDED: libcrypt.so.2

Question:

when I run make check (built on the old Fedora 34), I get “instdir/program/python-core-3.8.14/lib/lib-dynload/_crypt.cpython-3.8.so has suspicious NEEDED: libcrypt.so.2” error. What can I do with this error?

Answer:

sberg: (that specific check is only triggered by a non-empty –with-package-format=…), you can silence it with adding to your autogen.input the line: LO_ELFCHECK_ALLOWLIST=libcrypt.so.2
sberg: the error means that the packages you build depend on a lib that’s supposedly not available in LO’s baseline runtime environment (as specified in README.md)

Kevin Suo

LibreOffice 简体中文用户界面及官方网站本地化翻译,wiki贡献者,QA质控团队参与者。

“如何编译 LibreOffice”上的154条回复

大佬们遇到过这个没,开始以为没装python3,但是我装了还是报这个错

/home/zkfd/code/libreoffice-6.4.7.2/instdir/program/libpyuno.so has suspicious NEEDED: libpython3.5m.so.1.0
/home/zkfd/code/libreoffice-6.4.7.2/instdir/program/libpythonloaderlo.so has suspicious NEEDED: libpython3.5m.so.1.0
/home/zkfd/code/libreoffice-6.4.7.2/postprocess/CustomTarget_check_dynamic_objects.mk:20: recipe for target ‘/home/zkfd/code/libreoffice-6.4.7.2/workdir/CustomTarget/postprocess/check_dynamic_objects/check.done’ failed
make[1]: *** [/home/zkfd/code/libreoffice-6.4.7.2/workdir/CustomTarget/postprocess/check_dynamic_objects/check.done] Error 1
make[1]: *** 正在等待未完成的任务….
Makefile:282: recipe for target ‘build’ failed
make: *** [build] Error 2

Building LibreOffice as root is a very bad idea, use a regular user.

Makefile:63: recipe for target ‘check-if-root’ failed
make: *** [check-if-root] Error 1

而且,不只是编译libreoffice不要用root用户,干其他日常的事也别用,root只用来做需要超级管理员特权的事。否则,总有一天你的操作系统会乱掉,这是使用linux的最基本准则。

大佬们这个问题啥意思
正在连接 dev-www.libreoffice.org (dev-www.libreoffice.org)|89.238.68.201|:443… 已连接。
错误: “dev-www.libreoffice.org” 的证书不可信。
错误: “dev-www.libreoffice.org” 的证书已经过期。
/home/zkfd/code/libreoffice-6.4.7.2/Makefile.fetch:100: recipe for target ‘/home/lini/code/libreoffice-6.4.7.2/workdir/download’ failed
make: *** [/home/zkfd/code/libreoffice-6.4.7.2/workdir/download] Error 1

make过程中会联网从dev-www.libreoffice.org下载依赖的第三方库的源代码包。从提示来看,dev-www.libreoffice.org的证书过期了?你用网络浏览器打开这个地址看能不能正常访问?我这里试是正常的,没准你现在试试可能就正常了。

你好,我在openEuler 21.9 arm64系统上编译时,提示了缺少libcups2-dev,请问有遇到相同问题的吗?本来想去下一个依赖,不过发现依赖下面还有很多依赖,陷入了死循环,有好的解决办法吗

checking for utime… yes
checking for utimes… yes
checking syslog.h usability… yes
checking syslog.h presence… yes
checking for syslog.h… yes
checking whether to turn warnings to errors… no
checking whether to have assert() failures abort even without –enable-debug… no
checking whether to use ooenv for the instdir installation… no
checking whether to build the pagein binaries for oosplash… yes
checking whether to enable CUPS support… yes
checking whether cups support is present… checking for cupsPrintFiles in -lcups… no
checking cups/cups.h usability… no
checking cups/cups.h presence… no
checking for cups/cups.h… no
configure: error: Could not find CUPS. Install libcups2-dev or cups-devel.
Error running configure at ./autogen.sh line 322.

oleacc.idl
64 bit Processing C:/PROGRA~2/WI3CF2~1/10/Include/10.0.19041.0/um\64 bit oleaccProcessing .idlC:/PROGRA~2/WI3CF2~1/10/I
nclude/10.0.19041.0/um\oleacc
.idl
ocidl.idl
oleacc.idl
oleacc.idl

midl : error MIDL9008 : internal compiler problem – See documentation for suggestions on how to find a workaround.
midl: Assertion failed: hr == S_OK, file com\rpc\midl\front\filehndl.cxx, line 1023
make[1]: *** [E:/LibreOfficeComplie/libreoffice-7-3/winaccessibility/CustomTarget_ia2_idl.mk:29: E:/LibreOfficeComplie/
libreoffice-7-3/build64/workdir/CustomTarget/winaccessibility/ia2/idl/AccessibleKeyBinding.h] Error 48
64 bit Processing C:/PROGRA~2/WI3CF2~1/10/Include/10.0.19041.0/um\oleidl.idl
oleidl.idl

请问这个问题怎么解决

我自己不在windows下编译,但在IRC上帮你问了一下,见以下的答复:

(18时14分56秒) noel_grandin: suokunlong, the only things I see when googling for MIDL9008 suggest that something on that machine is in bad shape
(18时15分21秒) noel_grandin: sometimes, with windows, all you can do is re-install the machine from scratch
(18时15分47秒) noel_grandin: used to be, I would re=install my dev machine every year just to keep it clean
(18时18分36秒) cloph: maybe also solved by installing the windows 10 sdk/uninstalling and reinstalling Visual Studio, guess a little easier than to wipe the whole OS...

求助:
在openeuler20.03sp1-aarch64环境按照上面的指导文件编译完成7.1.8.1的版本并生成了rpm包。在autogen.input中设置了该参数“–without-java”。目前在使用calc时,会使用开发人员编写的java扩展插件。在calc的选项工具中有个“高级”配置,可以设置java的运行环境,但是运行环境里已经安装了java11,但是仍然无法自动检测到java环境,该项配置java所有选项都是灰色的。
问题是:出现此情况的原因是否与在编译生成的rpm包不完整而导致的,是否在编译时需要添加with-java设置?
还是当前libreoffice的运行环境里java的配置不正确没有被libreoffice检测到。

上面这个问题,我通过修改autogen.input的配置信息,取消without-java参数设置,同时根据configure阶段的提示信息增加了ant和junit配置和依赖包安装,重新编译后生成的rpm包,可以在calc的工具-选项-高级中选择配置java的运行环境。感谢这个论坛和专贴,帮助我完成了libreoffice的手工编译工作。

解决了就好。既然之前编译时使用了–without-java,那么你编译得到的软件包当然就不支持Java特性了,也就不会去检测你操作系统中已安装的java运行时环境了。

你好,我也是在欧拉系统 21.9 arm64上进行liboffice的编译,但是报缺少libcups2-dev的依赖,请问你编译时有这个问题吗。如果有的话能说一下如何解决的吗?感谢

在你的系统包管理器中查找libcups2-dev,看看对应的名称是哪个,安装即可。

在windows10下通过cygwin64编译libreoffice源码时出现该问题,请大家给我指点一下

midl : error MIDL9008 : internal compiler problem - See documentation for suggestions on how to find a workaround.
midl: Assertion failed: hr == S_OK, file com\rpc\midl\front\filehndl.cxx, line 1023
objidl.idl
64 bit Processing C:/PROGRA~2/WI3CF2~1/10/Include/10.0.22000.0/um\unknwn.idl
unknwn.idl
make[1]: *** [C:/LibreOffice7.2.6.2/libreoffice-6.4.7.2/winaccessibility/CustomTarget_ia2_idl.mk:28: C:/LibreOffice7.2.6.2/libreoffice-6.4.7.2/buildx64/workdir/CustomTarget/winaccessibility/ia2/idl/AccessibleKeyStroke.h] Error 48
make[1]: *** Waiting for unfinished jobs....
64 bit Processing C:/PROGRA~2/WI3CF2~1/10/Include/10.0.22000.0/shared\wtypes.idl
wtypes.idl
64 bit Processing C:/PROGRA~2/WI3CF2~1/10/Include/10.0.22000.0/shared\wtypesbase.idl
wtypesbase.idl
64 bit Processing C:/PROGRA~2/WI3CF2~1/10/Include/10.0.22000.0/shared\basetsd.h
basetsd.h
64 bit Processing C:/PROGRA~2/WI3CF2~1/10/Include/10.0.22000.0/shared\guiddef.h
guiddef.h
64 bit Processing C:/PROGRA~2/WI3CF2~1/10/Include/10.0.22000.0/um\oaidl.idl
oaidl.idl
64 bit Processing C:/PROGRA~2/WI3CF2~1/10/Include/10.0.22000.0/um\oleacc.idl
oleacc.idl

midl : error MIDL9008 : internal compiler problem - See documentation for suggestions on how to find a workaround.
midl: Assertion failed: hr == S_OK, file com\rpc\midl\front\filehndl.cxx, line 1023
make[1]: *** [C:/LibreOffice7.2.6.2/libreoffice-6.4.7.2/winaccessibility/CustomTarget_ia2_idl.mk:28: C:/LibreOffice7.2.6.2/libreoffice-6.4.7.2/buildx64/workdir/CustomTarget/winaccessibility/ia2/idl/AccessibleKeyBinding.h] Error 48
make: *** [Makefile:282: build] Error 2

我的编译环境是win10+VS2019/VS2022+CYGWIN64+jdk-17.0.2。
使用的版本是libreoffice7.2.6.2,libreoffice7.3.3.2
编译选项是:./autogen.sh
–enable-debug
–with-visual-studio=2022
–with-windows-sdk=10.0
–enable-pch
–disable-ccache
#–with-lang=zh-CN
–enable-symbols
–host=x86_64-pc-cygwin
–without-help
–without-helppack-integration
–disable-online-update
–disable-breakpad
–disable-odk
–without-doxygen
–enable-python=internal

编译命令:make check 2>&1 | tee build.log

oleacc.idl
64 bit Processing C:/PROGRA~2/WI3CF2~1/10/Include/10.0.19041.0/um\64 bit oleaccProcessing .idlC:/PROGRA~2/WI3CF2~1/10/I
nclude/10.0.19041.0/um\oleacc
.idl
ocidl.idl
oleacc.idl
oleacc.idl

midl : error MIDL9008 : internal compiler problem – See documentation for suggestions on how to find a workaround.
midl: Assertion failed: hr == S_OK, file com\rpc\midl\front\filehndl.cxx, line 1023
make[1]: *** [E:/LibreOfficeComplie/libreoffice-7-3/winaccessibility/CustomTarget_ia2_idl.mk:29: E:/LibreOfficeComplie/
libreoffice-7-3/build64/workdir/CustomTarget/winaccessibility/ia2/idl/AccessibleKeyBinding.h] Error 48
64 bit Processing C:/PROGRA~2/WI3CF2~1/10/Include/10.0.19041.0/um\oleidl.idl
oleidl.idl

我也遇到这个问题,请问解决了么?

make的时候这个报错,请问是怎么回事

[build DEP] LNK:Library/libepoxy.so
coreconf/config.mk:138: CPU_ARCH is not x86_64, disabling -mavx2
make build_nspr
coreconf/config.mk:138: CPU_ARCH is not x86_64, disabling -mavx2
mkdir -p ./../nspr/out
cd ./../nspr/out ; \
CC="gcc" CXX="g++" sh ../configure \
--disable-debug --enable-optimize --enable-64bit \
--with-dist-prefix='/home/logsaas/libreoffice/libreoffice-7.3.2.1/workdir/UnpackedTarball/nss/nss/../dist/out' \
--with-dist-includedir='/home/logsaas/libreoffice/libreoffice-7.3.2.1/workdir/UnpackedTarball/nss/nss/../dist/out/include'
make -C ./../nspr/out
make: *** ../nspr/out: No such file or directory.  Stop.
make[3]: *** [build_nspr] Error 2
make[2]: *** [nss_build_all] Error 2
[build DEP] LNK:Library/libepoxy.so
coreconf/config.mk:138: CPU_ARCH is not x86_64, disabling -mavx2
make build_nspr
coreconf/config.mk:138: CPU_ARCH is not x86_64, disabling -mavx2
mkdir -p ./../nspr/out
cd ./../nspr/out ; \
CC="gcc" CXX="g++" sh ../configure \
--disable-debug --enable-optimize --enable-64bit \
--with-dist-prefix='/home/logsaas/libreoffice/libreoffice-7.3.2.1/workdir/UnpackedTarball/nss/nss/../dist/out' \
--with-dist-includedir='/home/logsaas/libreoffice/libreoffice-7.3.2.1/workdir/UnpackedTarball/nss/nss/../dist/out/include'
make -C ./../nspr/out
make: *** ../nspr/out: No such file or directory.  Stop.
make[3]: *** [build_nspr] Error 2
make[2]: *** [nss_build_all] Error 2

您好,make的时候报这个错,我尝试mkdir out目录,又报找不到makefile,我感觉是cpu是arm哪里需要配置,但是无从下手

大佬们,make报这个错,有没有遇到过

make[2]: *** [libharfbuzz_la-hb-face.lo] 错误 1
make[2]: *** 正在等待未完成的任务....
make[1]: *** [/opt/libreoffice-7.2.2.2/workdir/ExternalProject/harfbuzz/build] 错误 1
make[1]: *** 正在等待未完成的任务....
make: *** [build] 错误 2

我也在搞arm编译的,但是好像cpu识别有问题,不知道咋搞,你那个x86的肯定没用

上面的发的问题没有了,但是不同的函数报这个错,我看说是个bug,我改了还是不行,你编译出来了吗

ucbstorage.cxx:(.text+0x645b): undefined reference to `non-virtual thunk to cppu::WeakImplHelper::acquire()'

那你咋编译呀

/home/logsaas/libreoffice-7-1/workdir/CxxObject/xmloff/source/core/xmlimp.o: In function `SvXMLImport::SetAutoStyles(SvXMLStylesContext*)':
xmlimp.cxx:(.text+0x8b90): undefined reference to `non-virtual thunk to cppu::WeakImplHelper::acquire()'
 
我加了template class uno::Reference ;这个还是报错,其它的问题加了就可以了

> 我idev频道聊了,都没能理我
在IRC频道请教时,要有耐心,开发者大多位于欧洲,有时差,可能你在提问时他们正在睡觉呢,你可以换个时间再问。更有效的办法是向开发者邮件列表发邮件询问,这样很多人就能看到并回应。

可以,但是

Error: Package: lodevbasis7.0-core-7.0.6.2-2.aarch64 (/lodevbasis7.0-core-7.0.6.2-2.aarch64)
           Requires: libfreetype.so.6
Error: Package: lodevbasis7.0-core-7.0.6.2-2.aarch64 (/lodevbasis7.0-core-7.0.6.2-2.aarch64)
           Requires: libXinerama.so.1
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest

装的时候提示这两个,我还看已经安装了,也有这个库,不知道咋解决呢

请教下,用arm的centos7.7的自带的或者x86的提供的7版本的libreoffice转换11M的doc几秒钟就可以转换了,但是arm上编译的7.06的得五十分钟,这个是什么原因:
转换命令为

[root@1 logsaas]# libreofficedev7.0 --convert-to pdf:writer_pdf_Export ./2.docx

“用arm的centos7.7的自带的或者x86的提供的7版本的libreoffice转换11M的doc几秒钟就可以转换了”,自带的版本也是7.0.6版吗,还是更新的版本?

大佬,你知道这个怎么安装吗,我装的时候说缺少依赖,包是不是全在这里,其它地方没有,workdir/installation/LibreOfficeDev/rpm/install/LibreOfficeDev_7.0.6.2_Linux_rpm

设置了的,我就把所以的rpm 执行yum -y install *.rpm,报错如下,我看了
[root@1 rpm]# rpm -qf /usr/lib64/libXinerama.so.1
libXinerama-1.1.3-2.1.el7.aarch64
这个包我也装了,我换了高版本的也不行
updates | 2.9 kB 00:00:00
—> Package lodevbasis7.0-draw.aarch64 0:7.0.6.2-2 will be installed
—> Package lodevbasis7.0-en-US.aarch64 0:7.0.6.2-2 will be installed
—> Package lodevbasis7.0-extension-pdf-import.aarch64 0:7.0.6.2-2 will be installed
—> Package lodevbasis7.0-firebird.aarch64 0:7.0.6.2-2 will be installed
—> Package lodevbasis7.0-gnome-integration.aarch64 0:7.0.6.2-2 will be installed
—> Package lodevbasis7.0-graphicfilter.aarch64 0:7.0.6.2-2 will be installed
—> Package lodevbasis7.0-images.aarch64 0:7.0.6.2-2 will be installed
—> Package lodevbasis7.0-impress.aarch64 0:7.0.6.2-2 will be installed
—> Package lodevbasis7.0-librelogo.aarch64 0:7.0.6.2-2 will be installed
—> Package lodevbasis7.0-libreofficekit-data.aarch64 0:7.0.6.2-2 will be installed
—> Package lodevbasis7.0-math.aarch64 0:7.0.6.2-2 will be installed
—> Package lodevbasis7.0-ogltrans.aarch64 0:7.0.6.2-2 will be installed
—> Package lodevbasis7.0-ooofonts.aarch64 0:7.0.6.2-2 will be installed
—> Package lodevbasis7.0-ooolinguistic.aarch64 0:7.0.6.2-2 will be installed
—> Package lodevbasis7.0-python-script-provider.aarch64 0:7.0.6.2-2 will be installed
—> Package lodevbasis7.0-pyuno.aarch64 0:7.0.6.2-2 will be installed
—> Package lodevbasis7.0-qtz.aarch64 0:7.0.6.2-2 will be installed
—> Package lodevbasis7.0-writer.aarch64 0:7.0.6.2-2 will be installed
—> Package lodevbasis7.0-xsltfilter.aarch64 0:7.0.6.2-2 will be installed
—> Package lodevbasis7.0-zh-CN.aarch64 0:7.0.6.2-2 will be installed
–> Finished Dependency Resolution
Error: Package: lodevbasis7.0-core-7.0.6.2-2.aarch64 (/lodevbasis7.0-core-7.0.6.2-2.aarch64)
Requires: libXinerama.so.1
You could try using –skip-broken to work around the problem
You could try running: rpm -Va –nofiles –nodigest
#安装路径
–prefix=/opt/office

#禁用帮助
–without-help
–without-helppack-integration
–disable-postgresql-sdbc

#启用简体中文用户界面
–with-lang=zh-CN
#在线更新及崩溃报告功能禁用
–disable-odk
–without-doxygen
–disable-online-update
–disable-breakpad
–enable-epm
–with-package-format=rpm
#禁用与JUnit有关的测试
–without-junit
#启用libreoffice内置的字体
–with-fonts
#禁用Office Development Kit。若启用ODK,则额外需要doxygen依赖项。
#若编译好之后您需要rpm (或deb)包,则需要启用下列两项,默认不启用:
#编译之间共享external_tarballs第三方源代码包,为加快编译速度,可以预先在国内镜像下载(https://go.suokunlong.cn:88/dl/libreoffice/external_tarballs/)。
#设置–with-external-tar选项指定第三方源代码包路径:
–with-system-nss
–with-external-tar=/home/logsaas/libreoffice/dl/libreoffice/external_tarballs
#禁用自带java
–without-java
#需要用到firebird数据库则要启用,默认不启用
–enable-firebird-sdbc
–without-system-firebird
–enable-python=internal

你运行autogen.sh以及编译make是以root用户进行的吗?随然我没试过,但是我看到过如果以root进行libreoffice编译会出现很多不可预期的问题,不知道会不会跟这个又关。另外,你在邮件列表中提供的代码粘贴链接是无效的,有人已经回复你了让你重新粘贴。

恩,我现在编译好了,这个问题就是依赖库的问题还可以问他们吗,只是链接无效吗,我只是个小运维,我都不知道怎么和他们聊,我看说root编译,好像没问题,我建了个用户,然后给了sudo权限老是出问题

粘贴Christian Lohmaier在邮件列表中的回复:

When building packages using the epm method, the dependency gets added by instsetoo_native/inc_openoffice/unix/find-requires-x11.sh – and it looks like it should also add the ()(64bit) marker to the dependency when PLATFORMID is linux_aarch64 and not only for linux_x86_64

check with rpm -q –provides libXinerama-1.1.3-2.1.el7.aarch64 whether it provides “libXinerama.so.1()(64bit)”

libXinerama-devel-1.1.3-2.1.el7.aarch64
libXinerama-1.1.3-2.1.el7.aarch64
这些东西我都检查过的
libxinerama1这个叶装了没用,不知道是不是版本有问题,但是不知道装哪个了

注意回复邮件列表时请“回复全部”,确保邮件列表的地址在收件人中。另外,邮件主题中请删除“Re: 回复:回复:回复:回复:回复:libreoffice-7.3.2 compile in arm system”前面的“回复”,只保留一个Re。

您好,我在欧拉系统上编译6.0.6.1版本,执行autogen.sh时提示:

checking build system type... aarch64-unknown-linux-gnu
checking host system type... aarch64-unknown-linux-gnu
checking for product name... LibreOfficeDev
checking for package version... 6.0.6.1
checking for product version... 6.0

最后提示

****************************************************************************
To build, run:
/usr/bin/make
······

之后执行了make,出现错误提示:

drbg.c: 在函数‘RNG_RandomUpdate’中:
../../../dist/out/include/prtypes.h:593:38: 错误:数组‘arg’的大小为负
     extern void pr_static_assert(int arg[(condition) ? 1 : -1])
                                      ^
drbg.c:541:5: 附注:in expansion of macro ‘PR_STATIC_ASSERT’
     PR_STATIC_ASSERT(sizeof(size_t) <= 4);
     ^~~~~~~~~~~~~~~~
make[5]: *** [../../coreconf/rules.mk:393:out/Linux_SINGLE_SHLIB/drbg.o] 错误 1
make[4]: *** [Makefile:626:libs] 错误 2
make[3]: *** [../coreconf/rules.mk:101:libs] 错误 2
make[2]: *** [coreconf/rules.mk:101:libs] 错误 2
make[1]: *** [/home/eng/make_libreoffice/libreoffice-6.0.6.1/external/nss/ExternalProject_nss.mk:34:/home/eng/make_libreoffice/libreoffice-6.0.6.1/workdir/ExternalProject/nss/build] 错误 1

·········

gawk: fatal: cannot use gawk builtin `namespace' as variable name
make[4]: *** [Makefile:1324:errnos-sym.h] 错误 2
make[3]: *** [Makefile:474:all-recursive] 错误 1
make[2]: *** [Makefile:405:all] 错误 2
make[1]: *** [/home/eng/make_libreoffice/libreoffice-6.0.6.1/external/libgpg-error/ExternalProject_libgpg-error.mk:36:/home/eng/make_libreoffice/libreoffice-6.0.6.1/workdir/ExternalProject/libgpg-error/build] 错误 1
make: *** [Makefile:269:build] 错误 2

看了源码drbg.c中提示问题的地方,是走了32位情况的条件编译,怎么能设定64位编译?或者有其他解决办法吗?

抱歉,你的评论被加入到了垃圾评论队列,刚刚看到。

你提到的问题我得再想想,但是你能不能先试试编译最新的7.3版本?6.0有点老了,老版本用最新的编译工具不可避免会出现问题。

比如你提到的libgpg的错误,应该是与https://dev.gnupg.org/T4459中提到的是一样的,这个错误已在https://dev.gnupg.org/rE7865041c77f4f7005282f10f9b6666b19072fbdf中修复,造成问题的原因是libgpg编译时依赖Gawk,而如果系统上的gawk是新版本的Gawk 5.0或更高版本的话就会报错。

实际上,如果你在现在的操作系统上(基于最新的工具链)来编译libreoffice 3.5,是肯定没法通过的,会有各种错误,而libreoffice 3.5在它当时的各个操作系统下都能编译通过。要想在新系统上顺利编译旧版本,你就需要用老旧的操作系统。

CPU:Loongson-3C5000LL
系统:Loongnix-Server Linux release 8.3
libreofficeb版本:7.2.5.1

大佬好,我需要编译安装libreoffice。但是configure最后出了个错误:

configure: WARNING: You are building 32-bit binaries but the JDK is 64-bit
configure: error: You should pass the --with-jdk-home option pointing to a (32-bit) JDK

这是不是由于libreoffice不认识龙芯的cpu,导致错误认为是个32位的cpu?

之后我configure后面加上–without-java,可以过了。但是后面make过不去,提示:

/home/user1/libreoffice-7.2.5.1/solenv/gbuild/UnoApiTarget.mk:127: *** gb_UnoApiHeadersTarget_select_variant must be defined by platform. Stop.

configure: WARNING: You are building 32-bit binaries but the JDK is 64-bit

这个很明显,你的CPU是64位的、但编译的libreoffice默认是64位的,而是你的JDK却是64位的。如果要启用java,那么你必须也使用32位的JDK,或者使用–host=x86_64-pc-cygwin或者–host=aarch64-pc-cygwin以启用64位libreoffice编译。其实如果不用数据库功能和求解器的话可以–without-java.
见:https://wiki.documentfoundation.org/Development/BuildingOnWindows#Selecting_the_host_.2F_target_system

gb_UnoApiHeadersTarget_select_variant must be defined by platform. Stop.

这个我也不太确定是哪里的问题,你可以先在–without-java的情况下运行一遍make distclean,然后重新运行autogen.sh,再make,如果这个错误还是出现,请提供较为完整的autogen.sh和make的日至,我可以代为在irc上求助。

[user1@514adae7f545 libreoffice-7.2.5.1]$ make 
mkdir -p /home/user1/libreoffice-7.2.5.1/instdir
/home/user1/libreoffice-7.2.5.1/solenv/bin/install-gdb-printers -a /home/user1/libreoffice-7.2.5.1/instdir -c
make -j 32  -rs -f /home/user1/libreoffice-7.2.5.1/Makefile.gbuild build  
/home/user1/libreoffice-7.2.5.1/solenv/gbuild/UnoApiTarget.mk:127: *** gb_UnoApiHeadersTarget_select_variant must be defined by platform.  Stop.
make: *** [Makefile:287: build] Error 2

感谢大佬回复,这是make后的全部信息。应该还是和不认识loongarch64这个架构的cpu有关。。。我其实不需要完整的libreoffice,只要soffice能运行就行。。。龙芯那边据说还在迁移libreoffice,只不过需要时间。我就自己先试试。。

来自红帽的资深开发者Caolán McNamara回复如下:

solenv/gbuild/UnoApiTarget.mk at that location has

ifeq ($(origin gb_UnoApiHeadersTarget_select_variant),undefined)
$(eval $(call gb_Output_error,gb_UnoApiHeadersTarget_select_variant
must be defined by platform))
endif

I expect that gets set by…

gb_UnoApiHeadersTarget_select_variant = $(if $(filter
udkapi,$(1)),comprehensive,$(2))

in solenv/gbuild/platform/unxgcc.mk

and for that to be included by

solenv/gbuild/platform/linux.mk

and for this architecture that should (I think) be included by
solenv/gbuild/platform/LINUX_GODSON64_GCC.mk

so to debug why that might not be happening I’d look into config.log
and search for the line that starts with
CPUNAME=
and see what that is to check that first

简单翻译如下:

在源代码的文件 solenv/gbuild/UnoApiTarget.mk 中,有:

ifeq ($(origin gb_UnoApiHeadersTarget_select_variant),undefined)
$(eval $(call gb_Output_error,gb_UnoApiHeadersTarget_select_variant
must be defined by platform))
endif

对于你的系统而言,我猜测该变量是由 solenv/gbuild/platform/unxgcc.mk 中的以下代码块设置的:

gb_UnoApiHeadersTarget_select_variant = $(if $(filter
udkapi,$(1)),comprehensive,$(2))

而unxgcc.mk被以下文件包含:
solenv/gbuild/platform/linux.mk

而对于你的体系架构而言,我觉得该linux.mk可能被以下文件包含:
solenv/gbuild/platform/LINUX_GODSON64_GCC.mk

因此,要调试并找到原因,你可以先看看config.log中的如下行中:
CPUNAME=
的值是什么,进而判断哪些代码被调用进而一步步出现最开始提到的错误的。

因此,我建议你:
1. 先`make distclean`
2. 再`./autogen.sh`
3. 提供源代码根目录下由autogen.sh生成的config.log文件中的CPUNAME=的值,并通过邮件将该config.log文件发送给我(suokunlong at 126.com,或者最好在论坛中发帖上传附件)

来自龙芯中科的工程师吴家欢(Wu Jiahuan),近日已向LibreOffice提交了适配龙芯64位处理器架构的代码,且该代码已被接受合并到了master分支。
见:https://git.libreofficechina.org/core/commit/?id=d3625d968901eb93a9680db8d1165f70de3fd64e

这项改进预计将在LibreOffice 7.5.0版本中体现。想要在龙芯平台编译LibreOffice的同学,可以克隆当前的master分支进行测试。

twaindsm_2.4.1.orig.tar.gz这个文件没有在https://go.suokunlong.cn:88/dl/libreoffice/external_tarballs

我缓存的都是我在linux下编译实际用到的。如果需要的人比较多的话,我考虑一下是不是有必要把所有的全部镜像下来。

希望能有一个全部的镜像,我编译的是windows版,可能和Linux所需的内容有些不同,有些内容即便我通过范强(谐音)还是不能通过https://dev-www.libreoffice.org/src/直接下载,比如twaindsm,https://go.suokunlong.cn:88/dl/libreoffice/external_tarballs下也是没有的,还有https://dev-www.libreoffice.org/extern/虽然这个里面的内容不多

twaindsm已下载到了https://go.suokunlong.cn:88/dl/libreoffice/external_tarballs中。里面内容太多了,全部镜像的话我最近可能没时间写抓取代码,等有时间吧。

楼主,你根据collabora公司这篇文章:https://collaboraonline.github.io/post/build-code-android/ ,编译过android吗?我有些问题想要咨询你。

没有哦,感觉android下的没有编译的必要,现成的拿来用就行了,手机上无非是偶尔打开个文件看看应应急

理论上可以,但是LibreOffice的各个模块之间的依赖关系比较复杂,要单独编译其中一个模块的话你需要自己修改源代码,去除不需要的部分,自己处理依赖关系,得不偿失。

近期从6.1.6版本,再到6.4版本,再到7.1版本,最后make都会报错.

armhelper.s: Assembler messages:
armhelper.s:48: Error: junk at end of line, first unrecognized character is `@'
armhelper.s:50: Error: unknown mnemonic `stmfd' -- `stmfd sp!,{r0-r3}#follow other parameters on stack'
armhelper.s:51: Error: operand 1 must be an integer register -- `mov r0,ip#r0 points to functionoffset/vtable'
armhelper.s:52: Error: operand 1 must be an integer register -- `mov r1,sp#r1 points to this and params'
armhelper.s:56: Error: junk at end of line, first unrecognized character is `@'
armhelper.s:58: Error: unknown mnemonic `stmfd' -- `stmfd sp!,{r4,lr}#save return address'
armhelper.s:60: Error: junk at end of line, first unrecognized character is `@'
armhelper.s:62: Error: unexpected characters following instruction at operand 1 -- `bl cpp_vtable_call(PLT)'
armhelper.s:64: Error: unexpected characters following instruction at operand 3 -- `add sp,sp,#4#no need to restore r4(we didn116touch it)'
armhelper.s:65: Error: operand 1 must be an integer register -- `ldr pc,[sp],#20#return,discarding function arguments'
armhelper.s:67: Error: junk at end of line, first unrecognized character is `@'
[UIL] basctl/uiconfig/basicide/ui/newlibdialog
make[1]: *** [/home/unix/Downloads/libreoffice-6.4.7.2/bridges/CustomTarget_gcc3_linux_arm.mk:18: /home/unix/Downloads/libreoffice-6.4.7.2/workdir/CustomTarget/bridges/source/cpp_uno/gcc3_linux_arm/armhelper.o] Error 1
make[1]: *** Waiting for unfinished jobs....
make: *** [Makefile:282: build] Error 2

> 一言若、说:
> 2021-08-12 上午10:08

> 这个错误,只需要修改armhelper.S文件开头的宏定义部分,把@改为#即可
> 应该是早期汇编的行注释时@,然而近期@已经不是汇编的注释了

看来你已经找到原因和解决方案了。

# ARM Android
--with-distro=LibreOfficeAndroidAarch64
--with-android-sdk=/home/haitao/Android/Sdk
--with-android-ndk=/home/haitao/Android/Sdk/android-ndk-r21
# 自己编译的话在线更新及崩溃报告功能就没啥用了,禁用
--disable-online-update
--disable-breakpad

# 禁用与JUnit有关的测试
--without-junit

# 我的系统上已经有字体了,禁用libreoffice内置的字体
#--with-fonts

# 禁用Office Development Kit。若启用ODK,则额外需要doxygen依赖项。
--disable-odk
--without-doxygen
--disable-ext-wiki-publisher
--without-fonts
--without-package-format
--without-omindex
--disable-debug
--disable-sal-log
--disable-symbols
--disable-compiler-plugins
--disable-ooenv
--disable-lto
--disable-gtk4
--disable-introspection

--disable-report-builder
--disable-lpsolve
--disable-coinmp
--enable-mergelibs
--disable-odk
#--disable-gtk
--disable-cairo-canvas
--disable-dbus
--disable-sdremote
--disable-sdremote-bluetooth
--disable-gio
--disable-randr
#--disable-gstreamer-1-0
--disable-cve-tests
--disable-cups
--disable-extension-update
--disable-postgresql-sdbc
--disable-lotuswordpro
--disable-firebird-sdbc
--disable-scripting-beanshell
--disable-scripting-javascript
--disable-largefile
--without-helppack-integration
--without-system-dicts
--disable-gtk3
--disable-dconf
#--disable-gstreamer-0-10
--disable-firebird-sdbc
--without-fonts
--without-junit
#--with-theme="no"
--disable-evolution2
--disable-avahi
--without-myspell-dicts
#--with-galleries="no"
#--disable-kde4
--disable-introspection
--without-krb5
--disable-python
--disable-pch
--disable-ooenv
--disable-dependency-tracking

--disable-avahi
--disable-cairo-canvas
--disable-coinmp
--disable-cups
--disable-cve-tests
--disable-dbus
--disable-dconf
--disable-dependency-tracking
--disable-evolution2
--disable-dbgutil
--disable-extension-integration
--disable-extension-update
--disable-firebird-sdbc
--disable-gio
--disable-gstreamer-1-0
--disable-gtk3
--disable-introspection
--disable-largefile
--disable-lotuswordpro
--disable-lpsolve
--disable-odk
--disable-ooenv
--disable-pch
--disable-postgresql-sdbc
--disable-python
--disable-randr
--disable-report-builder
--disable-scripting-beanshell
--disable-scripting-javascript
--disable-sdremote
--disable-sdremote-bluetooth
--without-export-validation
--without-helppack-integration
--without-junit
--without-krb5
--without-myspell-dicts
--without-system-dicts

你好,我的系统是麒麟V10,make的时候报错如下:

/usr/bin/ld: /lib64//libpangoft2-1.0.so.0: undefined reference to `FcWeightFromOpenTypeDouble'
/usr/bin/ld: /lib64//libpangoft2-1.0.so.0: undefined reference to `FcWeightToOpenTypeDouble'
/usr/bin/ld: /lib64//libpangoft2-1.0.so.0: undefined reference to `FcConfigReference'
collect2: error: ld returned 1 exit status
make[1]: *** [/opt/libreoffice-7.0.6.2/solenv/gbuild/LinkTarget.mk:667: /opt/libreoffice-7.0.6.2/workdir/LinkTarget/Executable/gtktiledviewer] Error 1
make[1]: *** Waiting for unfinished jobs....
make: *** [Makefile:282: build] Error 2

我编译的版本是7.0.6.2

平时普通的操作你大可不必、而且不应该用root用户进行操作,用root用户进行这些操作是一个坏习惯。如果是服务器的话,我猜测你的ssh登录也是用的root用户?被黑客破解登录密码只是个时间问题 。

下载、配置、编译以普通用户即可,只在安装rpm包时用sudo或root即可。

############
# 编译环境
############

NAME="Kylin Linux Advanced Server"
VERSION="V10 (Tercel)"
ID="kylin"
VERSION_ID="V10"
PRETTY_NAME="Kylin Linux Advanced Server V10 (Tercel)"
ANSI_COLOR="0;31"

############
# 编译错误(错误具体信息记不清楚了,大概是这个意思)
############

external/python3/ExternalPackage_python3.mk: lines 84: Can't find workdir/UnpackedTarball/python3/LO_lib/_sysconfigdata_m_linux_aarch64-unknown-linux-gnu.py

############
# 错误处理
############
修改源码https://go.suokunlong.cn:88/cgit/lo/core/tree/external/python3/ExternalPackage_python3.mk?h=libreoffice-7-0-5#n143

LO_lib/_sysconfigdata_m_$(python3_MACHDEP)_$(subst i686,i386,$(subst -pc,,$(HOST_PLATFORM))).py \

修改为如下:

LO_lib/_sysconfigdata_m_linux_aarch64-unknown-linux-gnu.py \

再执行make,编译成功

configure: error: Package requirements (fontconfig >= 2.4.1) were not met:

No package 'fontconfig' found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

Alternatively, you may set the environment variables FONTCONFIG_CFLAGS
and FONTCONFIG_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
Error running configure at ./autogen.sh line 316.

有没有遇到这样的问题

你编译的是哪个版本?是在什么host系统中编译的?如果是在Ubuntu上,那么你需要安装 libfontconfig1-dev 包,Fedora下这个包叫fontconfig-devel.

想知道iOS现在如何构建,官方源码下载后按照他提供的一个过时的文档编译,在模拟器那一块出现错误,无法编译通过,也没有形成.a等文件

据我所知,目前用于手机端可用的 LibreOffice 只有 Collabora Office for Android and iOS,见:https://www.collaboraoffice.com/collabora-office-android-ios-release-notes/ 。 可以直接下载已经编译好的安装包。如果要从源代码重新编译,则应当使用 online 仓库的源代码(https://git.libreofficechina.org/online/),编译过程请参考:https://collaboraonline.github.io/post/build-code-ios/

没试过不知道哦。我觉得理论上肯定能,如果出错那肯定是编译器有bug.

在鲲鹏服务器上编译发现如下错误,查阅是汇编上的错误,怎么修改armhelper.s:48: 错误:junk at end of line, first unrecognized character is `@’

在鲲鹏服务器上编译,在执行make后,提示这么个信息,编译的版本是5.4版本的,用的gcc是7.3版本的,在形成configure文件时添加的参数是–disable-gtk –without-java –with-package-format=rpm –enable-epm –with-external-tar=/home/libretars –build=arm-linux –without-doxygen –without-junit –without-help –without-helppack-integration,编译参数用的相同的参数

这个错误,只需要修改armhelper.S文件开头的宏定义部分,把@改为#即可
应该是早期汇编的行注释时@,然而近期@已经不是汇编的注释了

checking for bogus pkg-config... configure: error: yes, from unknown origin. This *will* break the build. Please modify your PATH variable so that /usr/local/bin/pkg-config is no longer found by configure scripts.
configure: error: Running configure script for BUILD system failed, see CONF-FOR-BUILD/config.log
Error running configure at ./autogen.sh line 316.

你好请问下这个错误的怎么结局

config打印是下面

configure:15119: checking pkg-config is at least version 0.9.0
configure:15122: result: yes
configure:15460: checking for ar
configure:15487: result: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ar
configure:15552: checking for nm
configure:15579: result: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/nm
configure:15644: checking for ranlib
configure:15671: result: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib
configure:15737: checking for objdump
configure:15753: found /usr/bin/objdump
configure:15764: result: objdump
configure:15829: checking for readelf
configure:15859: result: no
configure:15921: checking for strip
configure:15948: result: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/strip
configure:16169: checking for bogus pkg-config
configure:16179: error: yes, from unknown origin. This *will* break the build. Please modify your PATH variable so that /usr/local/bin/pkg-config is no longer found by configure scripts.

对于 LibreOffice 的编译和构建而言,macOS 和 iOS 是完全不同的两个体系。
在 macOS 上构建用于台式或笔记本式电脑的 LibreOffice 应用程序,已经很成熟了。官方有支持 macOS 的编译好的软件包可供下载,构建系统方面的支持就在官方源码仓库里,官方维基也有简单的编译指南:https://wiki.documentfoundation.org/Development/BuildingOnMac
在 iOS 上构建用于手机的 LibreOffice App,是非常新的东西,官方并不支持。目前据我所知只有 Collabora 公司一家在做这件事,他们有相应的 App 供用户下载,但具体构建系统支持的代码在哪里,有没有相应的文档,我都不太清楚。

我刚刚将 wiki 上的在 Windows 下编译的页面主要部分进行了翻译,你可以对照着看一下,也许能找到解决办法。根据我的理解,很可能是 Visual Studio 版本配置的问题。


C:\PROGRA~2\MICROS~1.0\VC\bin\cl.exe -arch:SSE /Fotmp32dll\uplink.obj -Iinc32 -Itmp32dll -MD -Ox -O2 -Ob2 -DOPENSSL_THREADS  -DDSO_WIN32 -W3 -Gs0 -GF -Gy -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -D_CRT_SECURE_NO_DEPRECATE -DOPENSSL_BN_ASM_
PART_WORDS -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_GF2m -DRC4_ASM -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DRMD160_ASM -DAES_ASM -DVPAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DOPENSSL_USE_APPLINK -I. -DOPENSSL_NO_IDEA -DOPENSSL_NO_RC5 -DOPENSSL_NO_MD
2 -DOPENSSL_NO_SSL2 -DOPENSSL_NO_KRB5 -DOPENSSL_NO_JPAKE -DOPENSSL_NO_WEAK_SSL_CIPHERS -DOPENSSL_NO_STATIC_ENGINE      /Zi /Fdtmp32dll/lib -D_WINDLL  -c ms\uplink.c
uplink.c
ms\uplink.c(12): fatal error C1083: □޷□□򿪰 □□□□ļ□: □□windows.h□□: No such file or directory
NMAKE : fatal error U1077: □□C:\PROGRA~2\MICROS~1.0\VC\bin\cl.exe□□: □□□ش□□롰0x2□□
Stop.
D:/LibreOfficeComplie/5.4.7.2/external/openssl/ExternalProject_openssl.mk:59: recipe for target 'D:/LibreOfficeComplie/5.4.7.2build/workdir/ExternalProject/openssl/build' failed
make[1]: *** [D:/LibreOfficeComplie/5.4.7.2build/workdir/ExternalProject/openssl/build] Error 1
make[1]: *** Waiting for unfinished jobs....
    [javac] D:\LibreOfficeComplie\5.4.7.2build\workdir\UnpackedTarball\beanshell\build.xml:182: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
    [javac] □□□□: Դ□□□а□ 1.6 □□ҪĿ□귢□а□ 1.6

BUILD FAILED
D:\LibreOfficeComplie\5.4.7.2build\workdir\UnpackedTarball\beanshell\build.xml:182: Compile failed; see the compiler error output for details.

Total time: 1 second
D:/LibreOfficeComplie/5.4.7.2/external/beanshell/ExternalProject_beanshell.mk:17: recipe for target 'D:/LibreOfficeComplie/5.4.7.2build/workdir/ExternalProject/beanshell/build' failed
make[1]: *** [D:/LibreOfficeComplie/5.4.7.2build/workdir/ExternalProject/beanshell/build] Error 1
    [javac] D:\LibreOfficeComplie\5.4.7.2build\workdir\UnpackedTarball\hsqldb\build\build.xml:143: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
<...>

BUILD FAILED
D:\LibreOfficeComplie\5.4.7.2build\workdir\UnpackedTarball\hsqldb\build\build.xml:353: Compile failed; see the compiler error output for details.

Total time: 6 seconds
D:/LibreOfficeComplie/5.4.7.2/external/hsqldb/ExternalProject_hsqldb.mk:17: recipe for target 'D:/LibreOfficeComplie/5.4.7.2build/workdir/ExternalProject/hsqldb/build' failed
make[1]: *** [D:/LibreOfficeComplie/5.4.7.2build/workdir/ExternalProject/hsqldb/build] Error 1

我只在Linux下编译过,Windows下不熟。你贴的错误提示太多太乱,能否从出错的地方整理一下发出来?另外,重要的是,你在编译时使用了什么样的编译选项(autogen.input 或 autogen.sh后的选项)?

我的编译选项是

../5.4.7.2/autogen.sh \
--with-external-tar=/cygdrive/d/LibreOfficeComplie/lo-externalsrc \
--with-junit=/cygdrive/d/LibreOfficeComplie/Junit/junit-4.10.jar \
--with-ant-home=/cygdrive/d/LibreOfficeComplie/apache-ant-1.9.5 \
--with-visual-studio=2015 \
--with-windows-sdk=7.1A \
--with-jdk-home=/cygdrive/e/Java/jdk-11.0.9.1+1 \
--enable-pch --disable-debug --disable-ccache --disable-odk --without-helppack-integration

不过在配置完以后会有个WARNING : No –with-ucrt-dir not specified or dlls not found – installer will have runtime dependency
make的时候报错是ms\uplink.c(12): fatal error C1083:windows.h: No such file or directory

> D:/LibreOfficeComplie/5.4.7.2/[…]

你这是在编译 git HEAD 还是在编译 5.4.7.2 版本?

那这篇文章的内容并不适合你。理论上来说发布版的源码里有生成好的 configure 等脚本,不需要再运行 autogen.sh。

而且 5.4.7 版本也太旧了,如果有符合要求的 Windows 7 和 Visual Studio 2019 version 16.4 以上版本的编译系统,建议还是从 git HEAD 或是最新版本 7.1.x 开始尝试。

据我所知,LibreOffice是通过autogen.sh脚本生成编译所在机器的configure文件,因此编译前必须运行autogen.sh,否则make找不到需要编译的目标。只不过,我没有在win下编译过,因此帮不上忙。如果有谁试过可以看一下。也可以去看看wiki页面,或者到开发者irc频道寻求帮助。

也可以试试libreoffice-7-1分支能否成功编译,这个分支已经很稳定了而且有很多性能提升。

你好,我在执行完./autogen.sh后,执行make build-nocheck,make发生错误

官方没有个微信或qq群什么的吗?arm架构编译有点难搞呀,能否支持下,给个群号

“编译完成后,执行 .instdir/program/soffice 即可运行。若在autogen.input 中启用了 “–with_package_format=rpm deb” ,则生成的安装包在 workdir/installation中。”
上面这句话不是很理解是什么意思,能否仔细说明下

你编译完成后,生成的可执行二进制程序位于你编译所在的源代码根目录下名为instdir的文件夹中,若在这个目录下执行./imstdir/program/soffice,就能直接运行。

如果你想编译生成RPM或DEB安装包(从而能像下载安装已发布的版本一样在你的linux操作系统上安装,而不是在编译所在源代码目录下通过命令行执行./imstdir/program/soffice来运行),那么在编译时你需要在autogen.input文件中(或者以autogen.sh之后所带的参数的形式)加上”–with_package_format=rpm deb”编译选项,这样在编译完成之后就会生成DEB包或RPM包,这些包位于编译所在源代码根目录下的workdir/installation文件夹中。

如果还是不理解,那么你确实需要动手一步一步实践一下,在哪一步出了问题就问具体的问题。

你可以在社区论坛中发帖提出问题,别人看到后懂的话一般都会回复你。确实有个QQ群的,但不是官方的,而是中文社区志愿者建的。我平时不上QQ,群里人多所以即使上了也不会去翻历史聊天记录,所以我觉得还是论坛里问或者回复这个博文问会好一些。

回复 编译完 LibreOffice 后如何运行自动用户界面测试 (UITest) – LibreOffice 中文社区 取消回复

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