Betalingsmetoder Abuse

Krydskompilering af Gotk3-programmer til Windows til Linux

  • Hjem
  • Videnbase
  • Krydskompilering af Gotk3-programmer til Windows til Linux
22.05.2021, 22:33

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.

Krydskompilering af Gotk3-applikationer

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:

Krydskompilering af Gotk3-programmer til Windows til Linux

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:

Krydskompilering af Gotk3-programmer til Windows til Linux

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.