Způsoby platby Abuse

Křížová kompilace aplikací Gotk3 pro Windows do Linuxu

22.05.2021, 22:33

Co je knihovna Gotk3? Je to především sada vazeb GTK3, nástroje pro tvorbu grafických aplikací oblíbeného v Linuxu pro programovací jazyk GoLang. V Linuxu můžete vytvářet cokoli bez chyb. Programy v jazyce Golang jsou však multiplatformní a lze je vytvářet i pro Windows, takže uživatel může mít určité potíže.

Problémem je, že prostředí Ubuntu vytváří při kompilaci moře chyb. Jednou z častých chyb je fatální chyba: libintl.h: No such file or directory. To značí problém GoLangu s nalezením správných hlavičkových souborů jazyka C. V ArchLinuxu se však tento problém nevyskytuje.

Křížová kompilace aplikací Gotk3

Pro účely křížové kompilace se uživatelům doporučuje používat ArchLinux s DockerHubem. Občas se vyskytnou chyby a po stažení obrazu se dozvíte, jak je opravit. Prvním krokem je stažení obrazu a spuštění kontejneru připojením složky s vaším projektem pomocí připojení svazku. Například do složky /project:

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

Pomocí volby --rm můžete kontejner po jeho ukončení odstranit. To se provádí za účelem uvolnění místa na pevném disku. V nejnovějším obrazu ArchLinuxu je problém s glibc, kvůli kterému nefunguje pacman. Chcete-li jej opravit, spusťte tento pří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"

Občas se také vyskytují problémy s klíči. Nejedná se o funkční systém, takže byste měli prostě vypnout ověřování balíčků, abyste nemuseli pokaždé hledat řešení. Jak to udělat. Chcete-li to provést, změňte v části [options] souboru /etc/pacman.conf parametr SigLevel na Never:

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

Dále aktualizujte databázi balíčků:

$ pacman -Sy

Nainstalujte požadované balíčky:

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

Potřebujeme také jeden balíček z AUR. Chcete-li jej načíst, přidejte do souboru /etc/pacman.conf tuto sekci:

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

Poté balíček nainstalujte:

$ pacman -S mingw-w64-gtk3

Samostatnou poznámkou je, že nejnovější verze Golangu již obsahuje moduly Go. Pokud je z nějakého důvodu ve svém projektu nepoužíváte, budete je muset začít používat. Je lepší nakonfigurovat moduly a závislosti projektu ve svém pracovním systému a zkontrolovat, zda je vše správně sestaveno pro Linux. Verzi gotk3 je třeba převzít z hlavní větve, protože starší verze nejsou s touto verzí jazyka sestaveny:

$ got get github.com/gotk3/gotk3 master

Dále přejděte do složky projektu a spusťte příkaz 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

Sestavení může trvat poměrně dlouho, ale po jeho dokončení uvidíte ve složce projektu hotový soubor.

Po dokončení instalace uvidí uživatel ve složce projektu hotový soubor:

Křížová kompilace aplikací Gotk3 pro Windows do Linuxu

Chcete-li se vyhnout opakování stejných kroků po sobě, použijte speciální soubor 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žná si s ním budete muset pohrát a provést změny, aby fungoval.

Je třeba vytvořit samostatný adresář, umístit do něj tento soubor a spustit jej:

$ docker build

Po provedení příkazu se zobrazí ID nového kontejneru:

Křížová kompilace aplikací Gotk3 pro Windows do Linuxu

Poté můžete kontejner spustit na základě získaného obrazu příkazem:

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

Tím je instrukce dokončena.