分类目录归档:代码开发

icecream – configure: error: Could not figure out what C++ library this is

今日在尝试编译libreoffice时,据说启用icecream能够加速编译,于是就在将一台Fedora 26主机设置为scheduler,这台Fedora主机和另一台Ubuntu主机上启用iceccd守护进程。通过icecc-monitor能够看到两台机器上的icecream均正常。但是当在libreoffice源代码下的 autogen.input 中加入 –enable-icecream 选项后,运行autogen.sh出现以下错误:
...
checking whether gcc supports -mno-avx... yes
checking whether gcc supports -fstack-protector-strong... yes
checking whether gcc supports atomic functions... yes
checking whether gcc supports __builtin_ffs... yes
checking whether gcc supports __attribute__((deprecated(message)))... yes
checking whether /usr/sbin/bin/g++ defines __base_class_type_info in cxxabi.h... no
checking whether /usr/sbin/bin/g++ defines __class_type_info in cxxabi.h... no
checking whether /usr/sbin/bin/g++ declares __cxa_allocate_exception in cxxabi.h... no
checking whether /usr/sbin/bin/g++ defines __cxa_eh_globals in cxxabi.h... no
checking whether /usr/sbin/bin/g++ defines __cxa_exceptions in cxxabi.h... no
checking whether /usr/sbin/bin/g++ declares __cxa_get_globals in cxxabi.h... no
checking whether /usr/sbin/bin/g++ declares __cxa_throw in cxxabi.h... no
checking whether /usr/sbin/bin/g++ defines __si_class_type_info in cxxabi.h... no
checking whether /usr/sbin/bin/g++ defines __vmi_class_type_info in cxxabi.h... no
checking whether /usr/sbin/bin/g++ supports __attribute__((warn_unused))... no
checking What the C++ library is... configure: error: Could not figure out what C++ library this is
Error running configure at ./autogen.sh line 293.

经过在irc频道询问,最终找到了如下解决办法:原来,Fedora默认将icecream的c++ wrapper安装到了 /usr/libexec/icecc,在 autogen.input 中加入 –with-gcc-home=/usr/libexec/icecc 重新运行autogen.sh即可解决。

When compile libreoffice in Fedora with icecream, you may encounter the above error message. To fix the above error, add the option “–with-gcc-home=/usr/libexec/icecc” in your autogen.input file.

LibreOffice Daily Build 每日构建版简体中文和繁体中文下载

和大家分享一下LibreOffice的每日构建版,是我根据每天最新的LibreOffice源代码自己编译的,目前只有linux下的64位版本,欢迎大家尝鲜测试。如果发现bug请向官方bug tracker反馈。

注意,这是每日构建版,属于测试版中的测试版,会有很多啃爹的地方,请不要用于重要工作用途,否则可能会导致文档丢失或损坏!我已经提醒你了!

下载地址:http://usa.suokunlong.cn/lo/daily/

目前基本上每两天重新编译一次。解压缩后运行program文件夹里的soffice即可。

更新:我自己的每日构建版停止更新。TDF官方已经有一个master分支的updater每日构建版了,感兴趣的可以去下载测试:

http://dev-builds.libreoffice.org/daily/master/Linux-archive-x86_64@80-updater/current/

需要下载*archive.tar.gz和*archive_langpack_zh-CN.tar.gz两个文件,解压缩,将 *archive_langpack_zh-CN 中的内容复制合并到*archive里,然后运行program/soffice即可。

[译] 探索LibreOffice的源代码库

本文最初由 Eilidh McAdam 发表于 Lanedo 博客,由 LibreOffice 中文社区翻译。

初次查看LibreOffice的源代码,您会被它庞大的代码量所吓倒。本文列出了LibreOffice代码库中一些有用的目录结构,希望有助于您入门。

总体布局

LibreOffice 由100多个相互依赖的模块组成, 每个模块位于LibreOffice源代码根目录下的一个文件夹中。请注意,除非特别注明,以下提到的所有路径都是相对于这个根目录的。每个模块一般都遵循特定的规则,至少包含以下文件或目录:

moduledir/README
一般包含关于该模块用途以及内容的描述。您可以在docs.libreoffice.org 找到所有的LibreOffice模块以及这些模块README第一行内容的清单。
moduledir/*.mk
各种编译可能性下的 gbuild makefiles.
moduledir/source/
源代码(一般情况下是 C++)。经常会有源代码以子模块(submodules)的形式出现。

头文件 (headers)

您会在多个地方看到头文件,这取决于定义的接口需要的最小作用范围 (Scope)。

include/
模块间的头文件。
moduledir/inc/
模块内的头文件。
moduledir/source/submoduledir/inc/
仅某个子模块要求的头文件。

在偶然的情况下,头文件也有可能在它们的 .cxx 函数实现中一同出现。

UI(用户界面)

如果一个模块有关联的GUI,则主要存在两种情况。目前,将用户界面规范从老旧的.src/.hrc格式转换为基于xml的 Glade/Gtk3 .ui 格式的工作正在进行中。

moduledir/uiconfig/
新的Glade风格的 .ui 文件。
moduledir/source/ui/
其它的 .src 文件。

编译系统

有一个来自2013年米兰LibreOffice年会上的非正式幻灯片,探讨了LibreOffice的编译系统状况。以下部分只列出了简短的概要,该幻灯片对一些细节有更细致的描述。

solenv/
包含编译系统的很多重要部分。
solenv/gbuild
gbuild 实现。
solenv/bin ; solenv/bin/modules/
Perl 编译和打包工具。
scp2/
打包和安装的配置文件。

当使用 ./autogen.sh 以及 make 完成了LibreOffice的编译之后,一个可运行的完整安装可在以下位置找到:

instdir/program/

在那里您可以找到 soffice.bin 以及 soffice. 前者是LibreOffice的主要二进制程序。当首次运行时,它建立用户配置文件 (user profile) 并退出,之后就可以再次以正常方式运行了。要避免该过程,应当使用包装程序 soffice 作为测试目的来运行LibreOffice。当以debugger模式运行LibreOffice时,应当直接使用 soffice.bin .

主要部件

LibreOffice Writer 文本文档

由于LibreOffice在历史上属于Sun的Star分支,它的主要部件位置包含了指向该legacy的提示。比如 ,Writer模块包含在 sw/ 目录中 (StarWriter)。

sw/
Writer的主要模块。
starmath/
数学公式编辑器。
swext/
内置的Writer扩展。

LibreOffice Calc 电子表格

sc/
Calc的主要代码。
chart2/
Calc的图表实现。

LibreOffice Draw 绘图(以及 LibreOffice Impress 演示文稿)

sd/
Draw和Impress共用一个模块以及这里的相当大一部分代码。
sdext/
Draw和Impress的扩展。

仅 LibreOffice Impress 演示文稿

slideshow/
Impress的幻灯片演示引擎。

图形模块

svx/
包含由几个主要模块共享的图形 (graphics) 辅助代码,尤其是Draw和Impress。
drawinglayer/
为绘图对象提供了一个API。

文档

sfx2/
包含被sw, sc和sd使用的用于调用document shells的框架。该模块包含文档载入及保存处理,文档载入和保存会分别激发正确的导入(import)和导出(export)筛选器。
writerfilter/
Writer .rtf 导入筛选器,以及部分的 .docx 导入筛选器。
writerperfect/
一个Writer导入筛选器家族,包含 WordPerfect, Microsoft Publisher 以及 Microsft Visio 文档格式导入筛选器。
oox/
对微软OOXML格式解析的支持 (.docx, .xlsx, etc.)

如果您想要解决Libreoffice的bug或者设计新的功能,通过以上的描述,希望您能知道该从何处下手。若需要更多帮助和资源,请参考我的 LibreOffice Development Howto 。如果需要专业支持,请随时联系我们