加载论坛时出错,请强制刷新页面重试。

移植LibreOffice的失败经历

寻找繁星

感觉离成功只差一步了(也是最艰难的一步)。

安装依赖

# https://wiki.documentfoundation.org/Development/BuildingOnLinux
sudo apt-get install git build-essential zip ccache junit4 libkrb5-dev nasm graphviz python3 python3-dev qtbase5-dev libkf5coreaddons-dev libkf5i18n-dev libkf5config-dev libkf5windowsystem-dev libkf5kio-dev autoconf libcups2-dev libfontconfig1-dev gperf default-jdk doxygen libxslt1-dev xsltproc libxml2-utils libxrandr-dev libx11-dev bison flex libgtk-3-dev libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev ant ant-optional

下载源码

wget http://mirrors.tuna.tsinghua.edu.cn/libreoffice/libreoffice/src/7.3.2/libreoffice-7.3.2.1.tar.xz
xz -dcT0 libreoffice-7.3.2.1.tar.xz | tar -x
cd libreoffice-7.3.2.1

在configure脚本中添加loongarch64的支持

vim configure,找到这一段:

    mips64el)
        CPUNAME=GODSON64
        RTL_ARCH=MIPS64_EL
        EPM_FLAGS="-a mips64el"
        PLATFORMID=linux_mips64_el
        ;;

在后面加上一段

    loongarch64)
        CPUNAME=GODSON64
        RTL_ARCH=LOONGARCH64_EL
        EPM_FLAGS="-a loongarch64el"
        PLATFORMID=linux_loongarch64_el
        ;;

注意这里的CPUNAME写成GODSON64其实并不好,这里暂时先写成这样。

继续搜索mips64el,然后在后面也加上loongarch64

# This is only used in Qt5/Qt6/KF5 checks to determine if /usr/lib64
# paths should be added to library search path. So lets put all 64-bit
# platforms there.
supports_multilib=
case "$host_cpu" in
x86_64 | powerpc64 | powerpc64le | s390x | aarch64 | mips64 | mips64el | loongarch64)
    if test "$SAL_TYPES_SIZEOFLONG" = "8"; then
        supports_multilib="yes"
    fi
    ;;
*)
    ;;
esac

开始编译

sudo apt install libgpgmepp-dev libgpgme-dev firebird-dev
./configure -with-system-nss --with-system-gpgmepp --with-system-firebird --disable-pdfium
make -j$(nproc)

如果不--disable-pdfium,会报这个错:

/home/searchstar/SetupFiles/libreoffice-7.3.2.1/workdir/UnpackedTarball/pdfium/build/build_config.h:122:2: error: #error Please add support for your architecture in build/build_config.h
 #error Please add support for your architecture in build/build_config.h
  ^~~~~

当然也可以把workdir/UnpackedTarball/pdfium/build/build_config.h的122行改成#define ARCH_CPU_64_BITS 1

编译失败

很遗憾,在成功编译了一堆依赖之后,最终还是编译失败了:

/home/searchstar/SetupFiles/libreoffice-7.3.2.1/bridges/source/cpp_uno/gcc3_linux_mips64/cpp2uno.cxx:47:10: fatal error: sys/sysmips.h: 没有那个文件或目录
 #include <sys/sysmips.h>
          ^~~~~~~~~~~~~~~
compilation terminated.
make[1]: *** [/home/searchstar/SetupFiles/libreoffice-7.3.2.1/solenv/gbuild/LinkTarget.mk:333:/home/searchstar/SetupFiles/libreoffice-7.3.2.1/workdir/CxxObject/bridges/source/cpp_uno/gcc3_linux_mips64/cpp2uno.o] 错误 1

失败的地方是cpp_uno,相关资料:

https://en.wikipedia.org/wiki/Universal_Network_Objects

https://help.libreoffice.org/latest/tg/text/sbasic/shared/uno_objects.html

大概看了一下源码,主要是一些跟体系结构有关的汇编需要修改。但是这已经超过我的能力范围了,希望有对LoongArch汇编比较熟的人在cpp_uno里添加loongarch64的支持。


yetist

寻找繁星

确实,编译 libreoffice 的主要问题是要把 cpp_uno 这个给移植了。


REDEAST

民间的话,估计只能xen0n大神亲自出马了!


杜比

In loongnix

apt source libreoffice
cd libreoffice-xxx
dpkg-buildpackage -uc -us 

寻找繁星

杜比 我在/etc/apt/sources.list里加入这两行:

deb-src http://pkg.loongnix.cn:8080/loongnix DaoXiangHu-testing main contrib non-free
deb-src http://pkg.loongnix.cn:8080/loongnix DaoXiangHu-cartoons main contrib non-free

然后sudo apt update,然后sudo apt build-dep libreoffice,会报错:

有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是
因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件
包尚未被创建或是它们已被从新到(Incoming)目录移出。
下列信息可能会对解决问题有所帮助:

下列软件包有未满足的依赖关系:
 builddeps:libreoffice : 依赖: libformula-java (>= 1.1.7) 但是它将不会被安装
                         依赖: liblayout-java (>= 0.2.10) 但是它将不会被安装
                         依赖: libloader-java (>= 1.1.6) 但无法安装它
                         依赖: librepository-java (>= 1.1.6) 但是它将不会被安装
                         依赖: libsac-java 但无法安装它
                         依赖: g++-mingw-w64-i686 但无法安装它
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。

zl2019

为楼主点赞


杜比

寻找繁星
看列出的依赖,可能是依赖软件包缺失,但因为loongnix有些软件,是集成到一块的,不好说就完全进行不下去。
遇到这样的情况,一般这样处理:
运行如下命令
dpkg-buildpackage -uc -us -d
这个命令会忽略依赖,但不会修改configure过程,昨晚我也试过,需要在config.sub等文件里,添加loongarch支持
然后看编译过程中,报哪些错误,有些架构相关是否能忽略掉。
若绕不过去,再考虑架构相关代码
若能绕过去,在debian/control里,把一些不需要的依赖编辑掉
生成最终可用的deb软件包
这样做的修改都会根据提示,制作成补丁,便于后续打磨



xen0n

冲天飞豹 理解你只是想打个广告,但我看了压缩包没有源码或者补丁,CLFS repo 里也没有。感觉这个回复对这个讨论串没什么作用(显然楼主不只是想用)。


知识共享许可协议
本站文章除其作者特殊声明外,一律采用CC BY-NC-SA 4.0许可协议进行授权。
进行转载或二次创作时务必以相同协议进行共享,严禁用于商业用途