Spôsoby platby Abuse

Krížová kompilácia aplikácií Gotk3 pre Windows do Linuxu

22.05.2021, 22:33

Čo je knižnica Gotk3? Je to predovšetkým súbor väzieb GTK3, nástroja na tvorbu grafických aplikácií populárneho v Linuxe pre programovací jazyk GoLang. V systéme Linux môžete vytvoriť čokoľvek bez chýb. Programy Golang sú však multiplatformné a dajú sa zostaviť aj pre Windows, takže používateľ môže mať určité problémy.

Problémom je, že prostredie Ubuntu vytvára počas kompilácie more chýb. Jednou z častých chýb je fatálna chyba: libintl.h: No such file or directory. Naznačuje to problém GoLangu s vyhľadaním správnych hlavičkových súborov jazyka C. Tento problém však v ArchLinuxe neexistuje.

Krížová kompilácia aplikácií Gotk3

Na účely krížovej kompilácie sa používateľom odporúča používať ArchLinux s DockerHubom. Niekedy sa vyskytnú chyby a po stiahnutí obrazu uvidíte, ako ich odstrániť. Prvým krokom je stiahnutie obrazu a spustenie kontajnera pripojením priečinka s vaším projektom pomocou pripojenia zväzku. Napríklad do priečinka /project:

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

Pomocou možnosti --rm môžete kontajner po jeho ukončení odstrániť. To sa robí preto, aby sa uvoľnilo miesto na pevnom disku. V najnovšom obraze ArchLinuxu je problém s glibc, kvôli ktorému nefunguje pacman. Ak ho chcete opraviť, spustite tento príkaz:

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

Niekedy sa vyskytujú aj problémy s kľúčmi. Toto nie je funkčný systém, takže by ste mali jednoducho vypnúť overovanie balíkov, aby ste nemuseli zakaždým hľadať riešenie. Ako to urobiť. Ak to chcete urobiť, v časti [options] súboru /etc/pacman.conf zmeňte parameter SigLevel na Never:

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

Ďalej aktualizujte databázu balíkov:

$ pacman -Sy

Nainštalujte požadované balíky:

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

Potrebujeme tiež jeden balík z AUR. Ak ho chcete načítať, pridajte do súboru /etc/pacman.conf túto časť:

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

Potom nainštalujte balík:

$ pacman -S mingw-w64-gtk3

Na samostatnú poznámku, najnovšia verzia Golangu už obsahuje moduly Go. Ak ich z nejakého dôvodu vo svojom projekte nepoužívate, budete ich musieť začať používať. Je lepšie nakonfigurovať moduly a závislosti projektu vo vašom pracovnom systéme a skontrolovať, či je všetko správne zostavené pre Linux. Verzia gotk3 by mala byť prevzatá z hlavnej vetvy, pretože staršie verzie nie sú zostavené s touto verziou jazyka:

$ got get github.com/gotk3/gotk3 master

Ďalej prejdite do priečinka projektu a spustite príkaz na zostavenie:

$ 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

Zostavenie môže trvať pomerne dlho, ale po jeho skončení uvidíte v priečinku projektu hotový súbor.

Po dokončení inštalácie uvidí používateľ v priečinku projektu hotový súbor:

Krížová kompilácia aplikácií Gotk3 pre Windows do Linuxu

Ak sa chcete vyhnúť opakovaniu rovnakých krokov zakaždým, použite špeciálny súbor Docker:

$ 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

Možno si s ním budete musieť pohrať a vykonať zmeny, aby fungoval.

Musíte vytvoriť samostatný adresár, umiestniť doň tento súbor a spustiť ho:

$ docker build

Po vykonaní príkazu sa zobrazí ID nového kontajnera:

Krížová kompilácia aplikácií Gotk3 pre Windows do Linuxu

Potom môžete kontajner spustiť na základe získaného obrazu pomocou príkazu:

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

Týmto sa pokyn ukončí.