介绍
在我们的DSS产品的开发过程中,需要使用C ++为LibreOffice创建扩展。语言的选择是由于C ++中存在现有项目,但是我不想在项目中创建“ zoo”。我们开始研究有关此问题的材料,文章,包括有关该资源的文章。似乎有很多数据,但是实际上,该信息要么非常稀缺,要么由于LO的版本过旧而不再相关。我不得不自己研究这个问题。
SDK组装
要在Windows下构建,您需要
- LibreOffice 6.2.4 / 6.2.5 + LibreOffice SDK 6.2.4 / 6.2.5(LibreOffice&SDK)或更高版本。
- GNU Zip使CoreUtils Sed(GNU)
- jdk(JDK)
- Microsoft VS,已安装用于C ++ + MSTools和Microsoft.NET的编译器
主要步骤
安装LibreOffice和LibreOffice SDK,最好在“无空格”目录中。示例C:\ App \ Libreoffice6.2.4.2x64和C:\ App \ Libreoffice6.2.4.2x64 \ sdk。我们打开控制台,转到包含已下载的SDK的目录:cd C:\ App \ Libreoffice6.2.4.2x64 \ sdk运行setsdkenv_windows.bat该脚本首次为系统上的用户生成一个批处理文件,要求您注册以下路径:- 图书馆
- LibreOffice SDK;
- GNU实用程序,用于构建程序包,C ++,C#和VB.NET编译器以及Java SDK目录。
指定适当的文件夹。重要!您必须指定相应位深度版本的所有路径。 “自动部署UNO组件(是/否)”将在组装后立即安装软件包,我选择了“否”。还必须遵循批处理文件的路径,例如C:\ Users \ yurev.admin \ AppData \ Roaming \ libreoffice6.2_sdk,并使用句柄调整VCVARS32的路径,这是通过新变量完成的。set OO_SDK_CPP_HOME=C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.20.27508\bin\HostX64\x64
set OO_SDK_VCVARS_HOME=C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build
if defined OO_SDK_VCVARS_HOME call "%OO_SDK_VCVARS_HOME%\VCVARS64.bat"
您需要为您的位深度选择路径。成功设置环境变量后,我们将收到以下消息:
不应有任何注释-这将在以后影响程序集。命令行进入为SDK模式准备的Shell。我们还转到带有GNU软件包的目录(C:\ Program Files(x86)\ GnuWin32 \ bin),并重命名link.exe链接器,以便将来不会与Microsoft链接器混淆,如有必要,我们始终可以使用新名称对其进行调用。SDK编译
下一步是编译标头或(对于Java)类。SDK本身就是具有.idl扩展名的组件的集合,这些组件被组装成.udl块,而这些块又被组装成具有.rdb扩展名的注册表。当然,以这种形式不可能使用它,但是这种方法的目标是能够编写自己的组件,然后将它们添加到通用树中。以LibreOffice示例为例。转到C:\ App \ Libreoffice6.2.4.2x64 \ sdk \ examples \ cpp \ complextoolbarcontrols目录并执行make。如果第一步中的数据输入正确并且环境变量设置正确,那么我们将看到C:\App\Libreoffice6.2.4.2x64\sdk\examples\cpp\complextoolbarcontrols>make
mkdir c:\libreoffice6.2_sdk\WINexample.out\slo\complextoolbarcontrols
c:\libreoffice6.2_sdk\WINexample.out\slo\complextoolbarcontrols .
make: [c:/libreoffice6.2_sdk/WINexample.out/slo/complextoolbarcontrols/MyProtocolHandler.obj] 1 ()
cl -c -MD -Zm500 -Zc:wchar_t- -wd4251 -wd4275 -wd4290 -wd4675 -wd4786 -wd4800 -GR -EHa -I. -Ic:/libreoffice6.2_sdk/WINexample.out/inc-Ic:/libreoffice6.2_sdk/WINexample.out/inc/examples -I../../../include -Ic:/libreoffice6.2_sdk/WINexample.out/inc/complextoolbarcontrols -DWIN32 -DWNT -D_DLL -DCPPU_ENV=mscx -Foc:\libreoffice6.2_sdk\WINexample.out\slo\complextoolbarcontrols\MyProtocolHandler.obj MyProtocolHandler.cxx
Microsoft (R) C/C++ 19.21.27702.2 x64
(C) (Microsoft Corporation). .
并且组装将进行,由于组装,我们得到:- 在C:\ libreoffice6.2_sdk \ WINexample.out \ inc目录中下载文件,
- manifest.xml C:\libreoffice6.2_sdk\WINexample.out\misc\complextoolbarcontrols\complextoolbarcontrols\META-INF,
- complextoolbarcontrols.uno.dll C:\libreoffice6.2_sdk\WINexample.out\misc\complextoolbarcontrols\Windows,
- , description.xml C:\libreoffice6.2_sdk\WINexample.out\misc\complextoolbarcontrols,
- C:\libreoffice6.2_sdk\WINexample.out\slo\complextoolbarcontrols
- complextoolbarcontrols.oxt C:\libreoffice6.2_sdk\WINexample.out\bin.
本质上,Makefile为我们完成了所有我们正确输入环境变量的操作。Cppmaker基于offapi.rdb和types.rdb注册表文件,下载生成cxx文件所需的依赖项。编译器将这些文件收集到目标文件中,从LibreOffice目录中将它们悬挂下来的链接器收集输出dll,然后生成manifest.xml description.xml .components文件,并使用zip将所有这些文件打包到.oxt存档中。带有cigwin(wiki)的版本由于控制台悬空而无法构建,因此不得不放弃。要在Linux下构建,您需要:
ibcurl4-openssl-dev zip git build-essential wget curl gstreamer1.0-libav libkrb5-dev nasm graphviz ccache libpython3-dev libreoffice-dev*
这些软件包不会占用太多空间,因此我们使用Docker映像来构建扩展。准备过程几乎与Window相似。从/ usr / lib / libreoffice / sdk运行setsdkenv_unix,而不是setsdkenv_windows.bat。之后,以与Windows类似的方式,转至/ usr / lib / libreoffice / sdk / examples / cpp / complextoolbarcontrols并运行make。结果,组装完成后,我们将通过setsdkenv_unix获得完成的扩展,该扩展位于配置期间指定的目录中。有助于我们的链接