Logo

Compilando seu próprio 'libqtNpas-dev'

Gladiston Santana - Um site para chamar de meu

A Ponte Entre Dois Mundos

Sabe aquela sensação de tentar conversar com alguém que fala um idioma completamente diferente e você precisa de um intérprete? Pois é, o Lazarus e o Qt vivem exatamente esse dilema romântico. O Lazarus (usando a LCL) não "fala" Qt nativamente; ele precisa de um tradutor oficial, e esse tradutor é a biblioteca libqt5pas (para o Qt5) ou a libqt6pas (para o moderno Qt6).

Essas bibliotecas são o que chamamos de bindings. Elas pegam as chamadas do Free Pascal e as traduzem para a API do Qt em C++. Sem elas, o Lazarus no Linux fica "mudo" se você tentar usar o toolkit Qt.

Por que Compilar se Posso Instalar?

Você deve estar pensando: "Gladiston, por que eu perderia meu precioso tempo compilando isso se o repositório da minha distro já tem o pacote?".

Primeiro, nem sempre a versão do repositório é a que você precisa — especialmente se você estiver usando uma versão muito nova (ou muito específica) do Lazarus. Segundo, ao compilar no seu próprio hardware, o compilador otimiza o código para as instruções específicas do seu processador. Em alguns casos, isso se traduz em uma performance mais "lisinha" e responsiva na IDE e nos seus programas.

É como comprar um terno: você pode comprar um pronto no shopping (repositório) ou ir ao alfaiate (compilar). O do alfaiate sempre cai melhor!

Antes de Começar: As Ferramentas

Não dá para construir uma casa sem ferramentas, certo? Para compilar esses bindings, seu Linux precisa de alguns pacotes essenciais de desenvolvimento e, claro, do próprio toolkit do Qt6.

No Ubuntu/Debian, resolva isso com:

sudo apt install qt6-base-dev qt6-base-dev-tools build-essential

Se você estiver no Fedora, o caminho é este:

sudo dnf groupinstall "Development Tools"
sudo dnf install qt6-qtbase-devel

Mãos à Obra: O Passo a Passo

Primeiro, precisamos localizar onde o Lazarus está instalado no seu sistema. Dentro da pasta do Lazarus, existe um caminho sagrado onde os fontes dos bindings residem. Siga os comandos abaixo com fé e coragem:

# Entre na toca do coelho (ajuste o caminho se necessário)
cd lazarus/lcl/interfaces/qt6/cbindings

# Prepare o terreno para a compilação
# Dica: em alguns sistemas pode ser qmake-qt6
qmake6

# Inicie a forja!
make

# Instale no sistema (no Debian/Ubuntu use o PREFIX abaixo)
sudo make install PREFIX=/usr/lib/x86_64-linux-gnu

No final da compilação, você receberá uma saída como essa:

/usr/bin/qmake6 -install qinstall -exe libQt6Pas.so.6.2.10 /usr/lib/x86_64-linux-gnu/libQt6Pas.so.6.2.10
strip --strip-unneeded /usr/lib/x86_64-linux-gnu/libQt6Pas.so.6.2.10
ln -f -s libQt6Pas.so.6.2.10 /usr/lib/x86_64-linux-gnu/libQt6Pas.so
ln -f -s libQt6Pas.so.6.2.10 /usr/lib/x86_64-linux-gnu/libQt6Pas.so.6
ln -f -s libQt6Pas.so.6.2.10 /usr/lib/x86_64-linux-gnu/libQt6Pas.so.6.2

Isso indica que as bibliotecas estão instaladas em /usr/lib/x86_64-linux-gnu.

Dica de Sobrevivência: Se você estiver usando o Qt5, o caminho mudará para .../interfaces/qt5/... e o comando será qmake ou qmake-qt5. Mas o espírito é o mesmo!

O Grande Teste: Verificação de Versão

Depois de todo esse trabalho, não queremos apenas acreditar que funcionou. Queremos ter certeza. O Linux tem uma ferramenta chamada ldconfig que gerencia as bibliotecas compartilhadas. Vamos perguntar a ela se o nosso novo tradutor está pronto para o serviço:

sudo ldconfig -v | grep libQt6Pas

Note agora:

/sbin/ldconfig.real: Não foi possível obter estado de /usr/lib64/gtk-2.0/modules: Arquivo ou diretório inexistente
/sbin/ldconfig.real: Não foi possível obter estado de /usr/local/lib/x86_64-linux-gnu: Arquivo ou diretório inexistente
/sbin/ldconfig.real: Caminho “/usr/lib/x86_64-linux-gnu” fornecido mais de uma vez
(de /etc/ld.so.conf.d/x86_64-linux-gnu.conf:4 e /etc/ld.so.conf.d/x86_64-linux-gnu.conf:3)
/sbin/ldconfig.real: Caminho “/lib/x86_64-linux-gnu” fornecido mais de uma vez
(de :0 e /etc/ld.so.conf.d/x86_64-linux-gnu.conf:3)
/sbin/ldconfig.real: Caminho “/usr/lib/x86_64-linux-gnu” fornecido mais de uma vez
(de :0 e /etc/ld.so.conf.d/x86_64-linux-gnu.conf:3)
/sbin/ldconfig.real: Caminho “/usr/lib” fornecido mais de uma vez
(de :0 e :0)
        libQt6Pas.so.6 -> libQt6Pas.so.6.2.10
/sbin/ldconfig.real: /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 is the dynamic linker, ignoring

Tem muito ruído na mensagem acima, mas note a linha libQt6Pas.so.6 -> libQt6Pas.so.6.2.10. Isso confirma que o sistema agora enxerga a biblioteca. O ldconfig leu o arquivo e criou o link simbólico necessário no cache. O restante das mensagens são apenas "ruídos" comuns em sistemas Debian/Ubuntu que passaram por atualizações ou têm arquivos de configuração de biblioteca (.conf) levemente redundantes.

Conclusão

Compilar seus próprios bindings não é apenas uma necessidade técnica às vezes; é um rito de passagem para quem quer ter controle total sobre o ambiente de desenvolvimento. O Lazarus é flexível, e saber como montar essas peças do quebra-cabeça é o que separa o "clicador de botões" do verdadeiro desenvolvedor Pascal.

Agora vá lá e aproveite a elegância do Qt com a rapidez do Pascal!