Metodi di pagamento Abuse

Compilazione incrociata delle applicazioni Gotk3 per Windows a Linux

22.05.2021, 22:33

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.

Compilazione incrociata delle applicazioni Gotk3

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:

Compilazione incrociata delle applicazioni Gotk3 per Windows a Linux

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:

Compilazione incrociata delle applicazioni Gotk3 per Windows a Linux

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.