Introdução
Durante o processo de desenvolvimento de nosso produto DSS, foi necessário criar uma extensão para o LibreOffice em C ++. A escolha do idioma ocorreu devido à presença de projetos existentes em C ++, mas eu não queria criar um "zoológico" nos projetos.Começamos a estudar materiais sobre esta questão, artigos, inclusive sobre este recurso . Parece que existem muitos dados, mas, na verdade, as informações eram muito escassas ou não eram mais relevantes devido a versões desatualizadas do LO.Eu tive que estudar a questão por conta própria.
Montagem do SDK
Para criar no Windows, você precisará
- LibreOffice 6.2.4 / 6.2.5 + LibreOffice SDK 6.2.4 / 6.2.5 ( LibreOffice e SDK ) ou superior.
- O GNU Zip torna o CoreUtils Sed ( GNU )
- jdk ( JDK )
- Microsoft VS com compilador instalado para C ++ + MSTools e Microsoft.NET
Passos principais
Instale o LibreOffice e o LibreOffice SDK, de preferência no diretório "Sem espaços".Exemplo C: \ App \ Libreoffice6.2.4.2x64 e C: \ App \ Libreoffice6.2.4.2x64 \ sdk, respectivamente.Abrimos o console,acessamos o diretório que contém o SDK baixado: cd C: \ App \ Libreoffice6.2.4.2x64 \ sdkExecute setsdkenv_windows.batEsse script gera um arquivo em lotes para o usuário no sistema pela primeira vez, solicitando que você registre os caminhos para:- LibreOffice
- SDK do LibreOffice;
- Utilitários GNU para criar pacotes, compiladores C ++, C # e VB.NET e o diretório Java SDK.
Especifique as pastas apropriadas.Importante ! Você deve especificar todos os caminhos para as versões das profundidades de bits correspondentes. "A implantação automática de componentes UNO (SIM / NÃO)" instalará o pacote imediatamente após a montagem, eu escolhi NÃO. Também é necessário seguir o caminho para o arquivo em lotes, por exemplo C: \ Users \ yurev.admin \ AppData \ Roaming \ libreoffice6.2_sdk e ajustar o caminho para VCVARS32 usando alças, eu fiz isso por meio de uma nova variável.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"
Você precisa escolher um caminho para sua profundidade de bits.Após definir com êxito as variáveis de ambiente, receberemos a seguinte mensagem:
Não deve haver nenhum comentário - isso afetará a montagem posteriormente. A linha de comando entra no Shell preparada para o modo SDK.Também vamos ao diretório com os pacotes GNU (C: \ Arquivos de Programas (x86) \ GnuWin32 \ bin) e renomeamos o vinculador link.exe para que ele não se confunda com o vinculador Microsoft no futuro, se necessário, sempre podemos chamá-lo com um novo nome.Compilação do SDK
O próximo passo é compilar os cabeçalhos ou as classes (para Java). Por si só, o SDK é uma coleção de componentes com a extensão .idl, montados em blocos .udl, que, por sua vez, são montados em um registro com a extensão .rdb.Dessa forma, é claro, é impossível usá-lo, mas o objetivo dessa abordagem é a capacidade de escrever seus próprios componentes, que são adicionados à árvore geral.Pegue o projeto no exemplo do LibreOffice.Vá para o diretório C: \ App \ Libreoffice6.2.4.2x64 \ sdk \ examples \ cpp \ complextoolbarcontrols e execute make.Se os dados na primeira etapa forem inseridos corretamente e as variáveis de ambiente forem definidas corretamente, veremosC:\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). .
e a montagem irá, como resultado da montagem, obtemos:- arquivos baixados no diretório 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.
Em essência, o Makefile faz tudo por nós no qual inserimos corretamente as variáveis de ambiente.O Cppmaker, com base nos arquivos de registro offapi.rdb e types.rdb, baixa as dependências necessárias para criar arquivos cxx.O compilador coleta esses arquivos em objetos, vinculando-os a partir do diretório LibreOffice, coleta a DLL de saída e, em seguida, os arquivos manifest.xml description.xml .components são gerados e tudo isso é empacotado usando zip no arquivo .oxt.A versão com cigwin ( wiki ) teve que ser abandonada devido à impossibilidade de construção devido a um console suspenso.Para criar no Linux, você precisará de:
ibcurl4-openssl-dev zip git build-essential wget curl gstreamer1.0-libav libkrb5-dev nasm graphviz ccache libpython3-dev libreoffice-dev*
Esses pacotes não ocupam muito espaço; portanto, usamos a imagem do Docker para criar a extensão.O processo de preparação é quase semelhante ao Windows. Em vez de setsdkenv_windows.bat, execute setsdkenv_unix em / usr / lib / libreoffice / sdk.Depois disso, por analogia com o Windows, vá para / usr / lib / libreoffice / sdk / examples / cpp / complextoolbarcontrols e execute make.Como resultado, após a conclusão da montagem, obteremos a extensão final que se encontra no diretório especificado durante a configuração por meio de setsdkenv_unix.Links que nos ajudaram