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.
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:
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:
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.