Fizetési módok Abuse

Gotk3 alkalmazások keresztkompilálása Windowsra Linuxra

22.05.2021, 22:33

Mi az a Gotk3 könyvtár? Ez elsősorban a GTK3, a Linuxban népszerű grafikus alkalmazáskészítő eszköz, a GoLang programozási nyelv kötéseinek készlete. Linuxban hibák nélkül bármit megépíthetsz. A Golang programok azonban keresztplatformosak, és Windowsra is építhetők, így a felhasználónak lehetnek nehézségei.

A probléma az, hogy az Ubuntu környezet tengernyi hibát produkál fordítás közben. Az egyik gyakori hiba a fatal error: libintl.h: No such file or directory. Ez azt jelzi, hogy a GoLangnak gondja van a megfelelő C fejlécfájlok megtalálásával. Ez a probléma azonban az ArchLinuxban nem létezik.

Gotk3 alkalmazások keresztkompilálása

A keresztkompiláláshoz a felhasználóknak ajánlott az ArchLinuxot a DockerHub segítségével használni. Néha előfordulnak hibák, és a kép letöltése után látni fogja, hogyan lehet ezeket kijavítani. Az első lépés a kép letöltése és a konténer elindítása a projektet tartalmazó mappa mountolásával a volume mount segítségével. Például a /project mappába:

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

A --rm opció használatával a konténer kilépése után törölheti a konténert. Ez azért történik, hogy helyet szabadítson fel a merevlemezen. A legújabb ArchLinux-képben van egy glibc-probléma, ami miatt a pacman nem működik. A javításhoz futtassa ezt a parancsot:

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

A kulcsokkal is vannak néha problémák. Ez nem egy működő rendszer, ezért érdemes csak kikapcsolni a csomagellenőrzést, hogy ne kelljen minden alkalommal megoldást keresni. Hogyan kell ezt megtenni? Ehhez az /etc/pacman.conf fájl [options] szakaszában a SigLevel paramétert változtassa Never-re:

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

Ezután frissítse a csomagadatbázist:

$ pacman -Sy

Telepítse a szükséges csomagokat:

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

Szükségünk van még egy csomagra az AUR-ból. Ennek betöltéséhez adjuk hozzá ezt a szakaszt az /etc/pacman.conf állományhoz:

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

Ezután telepítse a csomagot:

$ pacman -S mingw-w64-gtk3

Külön megjegyezzük, hogy a Golang legújabb verziója már tartalmazza a Go modulokat. Ha valamilyen oknál fogva nem használod őket a projektedben, akkor el kell kezdened használni őket. Jobb, ha a projekt moduljait és függőségeit a munkarendszereden konfigurálod, és ellenőrzöd, hogy minden helyesen épül-e fel Linuxra. A gotk3 verziót a master ágból kell venni, mert a régebbi verziók nem épülnek a nyelv ezen verziójával:

$ got get github.com/gotk3/gotk3 master

Ezután menjünk a projekt mappába, és futtassuk a build parancsot:

$ 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

A build elég sokáig tarthat, de miután befejeződött, a projekt mappában látni fogja a kész fájlt.

Amikor a telepítés befejeződött, a felhasználó látni fogja a kész fájlt a projektmappában:

Gotk3 alkalmazások keresztkompilálása Windowsra Linuxra

Annak érdekében, hogy ne kelljen újra és újra megismételni ugyanazokat a lépéseket, használjon egy speciális Dockerfile-t:

$ 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

Lehet, hogy bütykölnie kell, és változtatásokat kell végrehajtania, hogy működjön.

Létre kell hoznia egy külön könyvtárat, elhelyezni benne ezt a fájlt, és végrehajtani:

$ docker build

A parancs végrehajtása után megjelenik az új konténer azonosítója:

Gotk3 alkalmazások keresztkompilálása Windowsra Linuxra

Ezután a kapott kép alapján elindíthatja a konténert a paranccsal:

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

Ezzel befejeződik az utasítás.