Che cos'è la libreria Gotk3? Si tratta principalmente di un insieme di binding di GTK3, uno strumento di creazione di applicazioni grafiche diffuso in Linux per il linguaggio di programmazione GoLang. In Linux, è possibile creare qualsiasi cosa senza bug. Tuttavia, i programmi Golang sono multipiattaforma e possono essere costruiti anche per Windows, quindi l'utente potrebbe avere qualche difficoltà.
Il problema è che l'ambiente Ubuntu produce un mare di errori durante la compilazione. Uno degli errori più frequenti è il fatal error: libintl.h: No such file or directory
. Indica un problema di GoLang nel trovare i file header C giusti. Ma questo problema non esiste in ArchLinux.
Per la compilazione incrociata, si raccomanda agli utenti di utilizzare ArchLinux con DockerHub. A volte si verificano degli errori e, dopo aver scaricato l'immagine, si vedrà come risolverli. Il primo passo è scaricare l'immagine e avviare il contenitore montando una cartella con il progetto al suo interno usando il volume
mount. Ad esempio, nella cartella /project
:
$ docker run -it --rm -v ~/go/src/KeywordsMixer/:/project archlinux/archlinux bash
Usando l'opzione --rm
, si può cancellare il contenitore dopo averlo abbandonato. Questo viene fatto per liberare spazio sul disco rigido. C'è un problema con glibc
nell'ultima immagine di ArchLinux, a causa del quale pacman
non funziona. Per risolvere il problema, eseguire questo 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"
A volte ci sono anche problemi con le chiavi. Questo non è un sistema funzionante, quindi dovreste disabilitare la verifica dei pacchetti per non dover cercare ogni volta una soluzione. Come fare. Per farlo, nella sezione [options]
del file /etc/pacman.conf
, cambiate il parametro SigLevel
in Never
:
$ vim /etc/pacman.conf
[options]
SigLevel = Never
Successivamente, aggiornare il database dei pacchetti:
$ pacman -Sy
Installare i pacchetti necessari:
$ pacman -S git go vim mingw-w64-gcc cairo pango pkg-config gtk3
Abbiamo bisogno anche di un pacchetto di AUR
. Per caricarlo, aggiungere questa sezione a /etc/pacman.conf
:
$ vim /etc/pacman.conf
[ownstuff]
SigLevel = Never
Server = http://martchus.no-ip.biz/repo/arch/$repo/os/$arch
Quindi installare il pacchetto:
$ pacman -S mingw-w64-gtk3
Una nota a parte: l'ultima versione di Golang include già i moduli Go. Se per qualche motivo non sono utilizzati nel vostro progetto, dovrete iniziare a usarli. È meglio configurare i moduli e le dipendenze del progetto sul proprio sistema di lavoro e verificare che tutto sia compilato correttamente per Linux. La versione gotk3 deve essere presa dal ramo master
, perché le versioni più vecchie non vengono compilate con questa versione del linguaggio:
$ got get github.com/gotk3/gotk3 master
Quindi, andare nella cartella del progetto ed eseguire il comando di compilazione:
$ 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
La compilazione potrebbe richiedere molto tempo, ma al termine si vedrà il file finito nella cartella del progetto.
Al termine dell'installazione, l'utente vedrà il file finito nella cartella del progetto:
Per evitare di ripetere più volte gli stessi passaggi, si può usare un file Docker speciale:
$ 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
È possibile che si debba armeggiare con esso e apportare modifiche per farlo funzionare.
È necessario creare una cartella separata, inserirvi il file ed eseguirlo:
$ docker build
Dopo aver eseguito il comando, apparirà l'ID del nuovo contenitore:
Quindi è possibile avviare il contenitore basato sull'immagine ottenuta con il comando:
$ docker run -it --rm -v ~/go/src/KeywordsMixer/:/project 028451c45c15 bash
Questo completa l'istruzione.