O que é a biblioteca Gotk3? É principalmente um conjunto de ligações do GTK3, uma ferramenta de criação de aplicações gráficas popular no Linux para a linguagem de programação GoLang. No Linux, é possível construir qualquer coisa sem bugs. No entanto, os programas Golang são multiplataforma e também podem ser criados para Windows, pelo que o utilizador pode ter algumas dificuldades.
O problema é que o ambiente do Ubuntu produz um mar de erros durante a compilação. Um dos erros mais frequentes é o erro fatal: libintl.h: No such file or diretory
. Isto indica um problema do GoLang em encontrar os ficheiros de cabeçalho C corretos. Mas este problema não existe no ArchLinux.
Para fins de compilação cruzada, os usuários são recomendados a usar o ArchLinux com o DockerHub. Às vezes, ocorrem erros e, após o download da imagem, você verá como corrigi-los. O primeiro passo é baixar a imagem e iniciar o contêiner montando uma pasta com seu projeto usando a montagem de volume
. Por exemplo, para a pasta /project
:
$ docker run -it --rm -v ~/go/src/KeywordsMixer/:/project archlinux/archlinux bash
Utilizando a opção --rm
, pode eliminar o contentor depois de sair do mesmo. Isso é feito para liberar espaço no disco rígido. Há um problema com o glibc
na última imagem do ArchLinux, por causa do qual o pacman
não funciona. Para corrigi-lo, execute este comando:
$ patched_glibc=glibc-linux4-2.33-4-x86_64.pkg.tar.zst &&
curl -LO "https://repo.archlinuxcn.org/x86_64/$patched_glibc" &&
bsdtar -C / -xvf "$patched_glibc"
Às vezes também há problemas com as chaves. Este não é um sistema funcional, por isso deve apenas desativar a verificação de pacotes para não ter de procurar sempre uma solução. Como fazer isso. Para fazer isto, na secção [options]
do ficheiro /etc/pacman.conf
, altere o parâmetro SigLevel
para Never
:
$ vim /etc/pacman.conf
[options]
SigLevel = Never
Em seguida, atualize o banco de dados de pacotes:
$ pacman -Sy
Instale os pacotes necessários:
$ pacman -S git go vim mingw-w64-gcc cairo pango pkg-config gtk3
Nós também precisamos de um pacote do AUR
. Para o carregar, adicione esta secção a /etc/pacman.conf
:
$ vim /etc/pacman.conf
[ownstuff]
SigLevel = Never
Server = http://martchus.no-ip.biz/repo/arch/$repo/os/$arch
Em seguida, instale o pacote:
$ pacman -S mingw-w64-gtk3
Em uma nota separada, a última versão do Golang já inclui módulos Go. Se por alguma razão eles não são usados no seu projeto, terá de começar a usá-los. É melhor configurar os módulos e as dependências do projeto no seu sistema de trabalho e verificar se tudo está corretamente construído para Linux. A versão gotk3 deve ser retirada do ramo principal
, porque as versões mais antigas não são construídas com esta versão da linguagem:
$ got get github.com/gotk3/gotk3 master
Em seguida, vá para a pasta do projeto e execute o comando de compilação:
$ cd /project
CGO_CFLAGS_ALLOW=".*" CGO_LDFLAGS_ALLOW=".*"
PKG_CONFIG_PATH=/usr/x86_64-w64-mingw32/lib/pkgconfig CC=x86_64-w64-mingw32-gcc CGO_ENABLED=1
GOOS=windows GOARCH=amd64 go build -v -tags gtk_3_24 -gcflags "-N -l" -ldflags "-s -w -H=windowsgui" -o main-windows-amd64.exe main.go
A compilação pode demorar bastante tempo, mas depois de terminada, verá o ficheiro finalizado na pasta do projeto.
Quando a instalação estiver concluída, o utilizador verá o ficheiro finalizado na pasta do projeto:
Para evitar repetir as mesmas etapas várias vezes, use um Dockerfile especial:
$ vi Dockerfile
FROM archlinux/archlinux
RUN patched_glibc=glibc-linux4-2.33-4-x86_64.pkg.tar.zst &&
curl -LO "https://repo.archlinuxcn.org/x86_64/$patched_glibc" &&
bsdtar -C / -xvf "$patched_glibc"
RUN sed 's/SigLevel = Never/SigLevel = Never/g' /etc/pacman.conf
RUN pacman -Syu --noconfirm
RUN pacman -S git go mingw-w64-gcc cairo pango pkg-config gtk3 --noconfirm
RUN pacman -S vim --noconfirm
RUN echo "[ownstuff]" >> /etc/pacman.conf
RUN echo "SigLevel = Never" >> /etc/pacman.conf
RUN echo ''Server = http://martchus.no-ip.biz/repo/arch/$repo/os/$arch'' >> /etc/pacman.conf
RUN pacman -Sy --noconfirm
RUN pacman -S mingw-w64-gtk3 --noconfirm
Pode ser necessário mexer nele e fazer alterações para que funcione.
É necessário criar um diretório separado, colocar este ficheiro no mesmo e executá-lo:
$ docker build
Depois de executar o comando, aparecerá o ID do novo contentor:
Em seguida, pode iniciar o contentor com base na imagem obtida com o comando:
$ docker run -it --rm -v ~/go/src/KeywordsMixer/:/project 028451c45c15 bash
Isto completa a instrução.