Betalningsmetoder Abuse

Korskompilering av Gotk3-applikationer för Windows till Linux

  • Hem
  • Kunskapsbas
  • Korskompilering av Gotk3-applikationer för Windows till Linux
22.05.2021, 22:33

Vad är Gotk3-biblioteket? Det är främst en uppsättning bindningar av GTK3, ett grafiskt verktyg för skapande av applikationer som är populärt i Linux för programmeringsspråket GoLang. I Linux kan du bygga vad som helst utan buggar. Golang-program är dock plattformsoberoende och kan byggas för Windows också, så användaren kan ha vissa svårigheter.

Problemet är att Ubuntu-miljön producerar ett hav av fel under kompilering. Ett av de vanligaste felen är fatal error: libintl.h: No such file or directory. Det indikerar ett GoLang-problem med att hitta rätt C-headerfiler. Men det här problemet finns inte i ArchLinux.

Korskompilering av Gotk3-program

För att kunna korskompilera rekommenderas användare att använda ArchLinux med DockerHub. Ibland uppstår fel och efter att ha laddat ner bilden kommer du att se hur du fixar dem. Det första steget är att ladda ner avbildningen och starta behållaren genom att montera en mapp med ditt projekt i den med hjälp av volume mount. Till exempel till mappen /project:

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

Genom att använda alternativet --rm kan du ta bort behållaren efter att du har avslutat den. Detta görs för att frigöra utrymme på hårddisken. Det finns ett problem med glibc i den senaste ArchLinux-imagen, vilket gör att pacman inte fungerar. För att åtgärda det, kör det här kommandot:

$ 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 finns också ibland problem med nycklar. Detta är inte ett fungerande system, så du bör bara inaktivera paketverifiering så att du inte behöver leta efter en lösning varje gång. Hur man gör detta. För att göra detta, i avsnittet [options] i filen /etc/pacman.conf, ändra parametern SigLevel till Never:

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

Uppdatera sedan paketdatabasen:

$ pacman -Sy

Installera de paket som krävs:

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

Vi behöver också ett paket från AUR. För att ladda det lägger du till det här avsnittet i /etc/pacman.conf:

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

Installera sedan paketet:

$ pacman -S mingw-w64-gtk3

På en separat anmärkning innehåller den senaste versionen av Golang redan Go-moduler. Om de av någon anledning inte används i ditt projekt måste du börja använda dem. Det är bättre att konfigurera modulerna och beroendena i projektet på ditt arbetssystem och kontrollera att allt är korrekt byggt för Linux. Gotk3-versionen bör tas från huvudgrenen, eftersom äldre versioner inte är byggda med den här versionen av språket:

$ got get github.com/gotk3/gotk3 master

Gå sedan till projektmappen och kör kommandot build:

$ 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

Byggandet kan ta ganska lång tid, men när det är klart kommer du att se den färdiga filen i projektmappen.

När installationen är klar kommer användaren att se den färdiga filen i projektmappen:

Korskompilering av Gotk3-applikationer för Windows till Linux

För att undvika att upprepa samma steg gång på gång, använd en speciell 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

Du kan behöva pilla med den och göra ändringar för att få den att fungera.

Du måste skapa en separat katalog, placera den här filen i den och köra den:

$ docker build

När du har kört kommandot visas ID för den nya behållaren:

Korskompilering av Gotk3-applikationer för Windows till Linux

Sedan kan du starta behållaren baserat på den erhållna bilden med kommandot:

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

Detta avslutar instruktionen.