Betalingsmåter Abuse

Krysskompilering av Gotk3-applikasjoner for Windows til Linux

22.05.2021, 22:33

Hva er Gotk3-biblioteket? Det er først og fremst et sett med bindinger til GTK3, et grafisk verktøy for å lage applikasjoner som er populært i Linux for programmeringsspråket GoLang. I Linux kan du bygge hva som helst uten feil. Golang-programmer er imidlertid plattformuavhengige og kan også bygges for Windows, så brukeren kan ha noen vanskeligheter.

Problemet er at Ubuntu-miljøet produserer et hav av feil under kompilering. En av de hyppigste feilene er fatal error: libintl.h: No such file or directory. Det indikerer et GoLang-problem med å finne de riktige C-headerfilene. Men dette problemet eksisterer ikke i ArchLinux.

Krysskompilering av Gotk3-applikasjoner

For å krysskompilere anbefales brukere å bruke ArchLinux med DockerHub. Noen ganger oppstår det feil, og etter at du har lastet ned bildet, vil du se hvordan du løser dem. Det første trinnet er å laste ned bildet og starte containeren ved å montere en mappe med prosjektet ditt i den ved hjelp av volummontering. For eksempel til /project-mappen:

$ docker run -it --rm -v ~/go/src/KeywordsMixer/:/project archlinux/archlinux bash

Ved å bruke --rm-alternativet kan du slette containeren etter at du har avsluttet den. Dette gjøres for å frigjøre plass på harddisken. Det er et problem med glibc i den nyeste ArchLinux-imagen, noe som gjør at pacman ikke fungerer. Kjør denne kommandoen for å fikse det:

$ 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"

Det er også noen ganger problemer med nøkler. Dette er ikke et fungerende system, så du bør bare deaktivere pakkeverifisering slik at du ikke trenger å lete etter en løsning hver gang. Slik gjør du dette. For å gjøre dette, endrer du SigLevel-parameteren til Never i [options] -delen av /etc/pacman.conf-filen:

$ vim /etc/pacman.conf
[options]
SigLevel = Never

Deretter oppdaterer du pakkedatabasen:

$ pacman -Sy

Installer de nødvendige pakkene:

$ pacman -S git go vim mingw-w64-gcc cairo pango pkg-config gtk3

Vi trenger også en pakke fra AUR. For å laste den inn, legg til denne seksjonen i /etc/pacman.conf:

$ vim /etc/pacman.conf
[ownstuff]
SigLevel = Never
Server = http://martchus.no-ip.biz/repo/arch/$repo/os/$arch

Installer deretter pakken:

$ pacman -S mingw-w64-gtk3

Den nyeste versjonen av Golang inneholder allerede Go-moduler. Hvis de av en eller annen grunn ikke brukes i prosjektet ditt, må du begynne å bruke dem. Det er bedre å konfigurere modulene og avhengighetene til prosjektet på arbeidssystemet ditt og sjekke at alt er bygget riktig for Linux. Gotk3-versjonen bør hentes fra mastergrenen, fordi eldre versjoner ikke er bygget med denne versjonen av språket:

$ got get github.com/gotk3/gotk3 master

Deretter går du til prosjektmappen og kjører build-kommandoen:

$ 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

Byggingen kan ta ganske lang tid, men etter at den er ferdig, vil du se den ferdige filen i prosjektmappen.

Når installasjonen er fullført, vil brukeren se den ferdige filen i prosjektmappen:

Krysskompilering av Gotk3-applikasjoner for Windows til Linux

For å unngå å gjenta de samme trinnene gang på gang, kan du bruke en spesiell Dockerfil:

$ 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

Det kan hende du må flikke på den og gjøre endringer for å få den til å fungere.

Du må opprette en egen katalog, plassere denne filen i den og kjøre den:

$ docker build

Etter at du har kjørt kommandoen, vises ID-en til den nye containeren:

Krysskompilering av Gotk3-applikasjoner for Windows til Linux

Deretter kan du starte containeren basert på det oppnådde bildet med kommandoen:

$ docker run -it --rm -v ~/go/src/KeywordsMixer/:/project 028451c45c15 bash

Dette fullfører instruksjonen.