Pull to refresh
0
«Кросс технолоджис»
Системный интегратор и разработчик ПО

Установка и настройка SDK для сборки LibreOffice extension

Reading time4 min
Views5K

Введение


В процессе разработки нашего продукта DSS потребовалось создать расширение для LibreOffice на C++. Выбор языка был обусловлен наличием уже существующих проектов на C++, а разводить «зоопарк» в проектах не хотелось.

Начали изучать материалы по этому вопросу, статьи, в том числе и на данном ресурсе. Казалось бы, данных довольно много, однако на самом деле информация была либо очень скудной, либо она была уже не актуальна из-за устаревших версий LO.

Пришлось изучать вопрос своими силами.

image

Сборка SDK


Для сборки под Windows понадобятся


  • LibreOffice 6.2.4/6.2.5 +LibreOffice SDK 6.2.4/6.2.5 ( LibreOffice & SDK) или версии выше.
  • GNU Zip Make 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

Данный скрипт, при первом запуске генерирует батник под Вашего пользователя в системе, в котором предлагает прописать пути до:

  1. LibreOffice;
  2. LibreOffice SDK;
  3. GNU утилит необходимых для сборки пакетов, компиляторов С ++,C# и VB.NET, и директории Java SDK.

Указываем соответствующие папки.

Важно! Необходимо указывать все пути до версий соответствующих разрядностей. “Automatic deployment of UNO components (YES/NO)“ будет сразу после сборки инсталлировать пакет, я выбирал NO. Также необходимо пройти по пути до батника, например 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" 

Выбирать путь нужно для своей разрядности.

После удачного выставления переменных окружений мы получим следующее сообщение:

image

Никаких замечаний быть не должно — это отразится потом на сборке. Командная строка переходит в режим Shell prepared for SDK.

Также перейдём в директорию с GNU пакетами(C:\Program Files (x86)\GnuWin32\bin) и переименуем линкер link.exe, чтобы в дальнейшем он не путался с линкером Microsoft, если потребуется мы всегда сможем вызвать его по новому имени.

Компиляция SDK


Следующий этап — компиляция header’ов или (для 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'ому. Вместо setsdkenv_windows.bat запускаем setsdkenv_unix из /usr/lib/libreoffice/sdk.

После этого по аналогии с Windows перейдём в /usr/lib/libreoffice/sdk/examples/cpp/complextoolbarcontrols и выполняем make.

В результате по окончании сборки получим готовое расширение, лежащее в директории, указанное при настройке через setsdkenv_unix.

Ссылки которые нам помогли


Tags:
Hubs:
+3
Comments0

Articles

Information

Website
crosstech.ru
Registered
Founded
Employees
101–200 employees
Location
Россия