Hvad er Gotk3-biblioteket? Det er primært et sæt bindinger til GTK3, et grafisk værktøj til oprettelse af applikationer, der er populært i Linux til programmeringssproget GoLang. I Linux kan du bygge hvad som helst uden fejl. Men Golang-programmer er platformuafhængige og kan også bygges til Windows, så brugeren kan have nogle problemer.
Problemet er, at Ubuntu-miljøet producerer et hav af fejl under kompilering. En af de hyppige fejl er fatal error: libintl.h: No such file or directory.
Det indikerer et GoLang-problem med at finde de rigtige C-header-filer. Men dette problem findes ikke i ArchLinux.
For at kunne krydskompilere anbefales det, at man bruger ArchLinux med DockerHub. Nogle gange opstår der fejl, og når du har downloadet billedet, vil du se, hvordan du løser dem. Det første skridt er at downloade billedet og starte containeren ved at montere en mappe med dit projekt i ved hjælp af volume
mount. For eksempel til mappen /project
:
$ docker run -it --rm -v ~/go/src/KeywordsMixer/:/project archlinux/archlinux bash
Ved at bruge --rm-indstillingen
kan du slette containeren, når du har afsluttet den. Dette gøres for at frigøre plads på harddisken. Der er et problem med glibc
i det seneste ArchLinux-image, som gør, at pacman
ikke virker. Kør denne kommando for at løse 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"
Der er også nogle gange problemer med nøgler. Dette er ikke et fungerende system, så du bør bare deaktivere pakkeverifikation, så du ikke behøver at lede efter en løsning hver gang. Sådan gør du det. For at gøre dette skal du i afsnittet [options]
i filen /etc/pacman.conf
ændre parameteren SigLevel
til Never
:
$ vim /etc/pacman.conf
[options]
SigLevel = Never
Dernæst skal du opdatere pakkedatabasen:
$ pacman -Sy
Installer de nødvendige pakker:
$ pacman -S git go vim mingw-w64-gcc cairo pango pkg-config gtk3
Vi skal også bruge en pakke fra AUR
. For at indlæse den skal du tilføje dette afsnit til /etc/pacman.conf
:
$ vim /etc/pacman.conf
[ownstuff]
SigLevel = Never
Server = http://martchus.no-ip.biz/repo/arch/$repo/os/$arch
Installer derefter pakken:
$ pacman -S mingw-w64-gtk3
I øvrigt indeholder den seneste version af Golang allerede Go-moduler. Hvis de af en eller anden grund ikke bruges i dit projekt, bliver du nødt til at begynde at bruge dem. Det er bedre at konfigurere modulerne og afhængighederne i projektet på dit arbejdssystem og kontrollere, at alt er bygget korrekt til Linux. Gotk3-versionen skal tages fra master-grenen
, fordi ældre versioner ikke er bygget med denne version af sproget:
$ got get github.com/gotk3/gotk3 master
Gå derefter til projektmappen og kør 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
Bygningen kan tage ret lang tid, men når den er færdig, vil du se den færdige fil i projektmappen.
Når installationen er færdig, vil brugeren se den færdige fil i projektmappen:
For at undgå at gentage de samme trin gang på gang skal du bruge en særlig 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 være nødvendigt at pille ved den og foretage ændringer for at få den til at fungere.
Du skal oprette en separat mappe, placere denne fil i den og udføre den:
$ docker build
Når du har udført kommandoen, vises ID'et for den nye container:
Derefter kan du starte containeren baseret på det opnåede image med kommandoen:
$ docker run -it --rm -v ~/go/src/KeywordsMixer/:/project 028451c45c15 bash
Dette afslutter instruktionen.