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.
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:
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:
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.