Maksutavat Abuse

Gotk3-sovellusten ristiinkääntäminen Windowsista Linuxiin

22.05.2021, 22:33

Mikä on Gotk3-kirjasto? Se on ensisijaisesti joukko sidoksia GTK3:een, joka on Linuxissa suosittu graafisten sovellusten luontityökalu GoLang-ohjelmointikielelle. Linuxissa voit rakentaa mitä tahansa ilman virheitä. Golang-ohjelmat ovat kuitenkin alustarajat ylittäviä, ja niitä voidaan rakentaa myös Windowsille, joten käyttäjällä voi olla vaikeuksia.

Ongelmana on, että Ubuntu-ympäristö tuottaa käännettäessä virhemerta. Yksi yleisimmistä virheistä on fatal error: libintl.h: No such file or directory. Se kertoo GoLangin ongelmasta oikeiden C-otsikkotiedostojen löytämisessä. Tätä ongelmaa ei kuitenkaan ole ArchLinuxissa.

Gotk3-sovellusten ristiinkääntäminen

Ristikompilointia varten käyttäjille suositellaan ArchLinuxin käyttöä DockerHubin kanssa. Joskus ilmenee virheitä, ja kuvan lataamisen jälkeen näet, miten ne korjataan. Ensimmäinen vaihe on ladata imago ja käynnistää kontti mounttaamalla kansio, jossa projektisi on, käyttämällä volume mountia. Esimerkiksi /project-kansioon:

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

Käyttämällä --rm-vaihtoehtoa voit poistaa kontin poistumisen jälkeen. Tämä tehdään, jotta kiintolevyltä vapautuu tilaa. Viimeisimmässä ArchLinux-kuvauksessa on ongelma glibc:n kanssa, jonka vuoksi pacman ei toimi. Voit korjata sen suorittamalla tämän komennon:

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

Myös avainten kanssa on joskus ongelmia. Tämä ei ole toimiva järjestelmä, joten sinun kannattaa vain poistaa pakettien tarkistaminen käytöstä, jotta sinun ei tarvitse etsiä ratkaisua joka kerta. Miten tämä tehdään. Tee tämä muuttamalla /etc/pacman.conf-tiedoston [options]-osiossa SigLevel-parametrin arvoksi Never:

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

Päivitä seuraavaksi pakettitietokanta:

$ pacman -Sy

Asenna tarvittavat paketit:

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

Tarvitsemme myös yhden paketin AUR:sta. Voit ladata sen lisäämällä tämän kohdan tiedostoon /etc/pacman.conf:

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

Asenna sitten paketti:

$ pacman -S mingw-w64-gtk3

Erikseen mainittakoon, että Golangin uusin versio sisältää jo Go-moduulit. Jos niitä ei jostain syystä käytetä projektissasi, sinun on alettava käyttää niitä. On parempi konfiguroida projektin moduulit ja riippuvuudet työjärjestelmälläsi ja tarkistaa, että kaikki on rakennettu oikein Linuxille. Gotk3-versio tulisi ottaa master-haarasta, koska vanhempia versioita ei rakenneta tämän kieliversion kanssa:

$ got get github.com/gotk3/gotk3 master

Siirry seuraavaksi projektikansioon ja suorita build-komento:

$ 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

Rakentaminen voi kestää melko kauan, mutta kun se on valmis, näet valmiin tiedoston projektikansiossa.

Kun asennus on valmis, käyttäjä näkee valmiin tiedoston projektikansiossa:

Gotk3-sovellusten ristiinkääntäminen Windowsista Linuxiin

Voit välttää samojen vaiheiden toistamisen kerta toisensa jälkeen käyttämällä erityistä Docker-tiedostoa:

$ 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

Saatat joutua korjailemaan sitä ja tekemään muutoksia saadaksesi sen toimimaan.

Sinun on luotava erillinen hakemisto, sijoitettava tämä tiedosto siihen ja suoritettava se:

$ docker build

Kun komento on suoritettu, uuden kontin tunnus tulee näkyviin:

Gotk3-sovellusten ristiinkääntäminen Windowsista Linuxiin

Sitten voit käynnistää kontin saadun kuvan perusteella komennolla:

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

Tämä viimeistelee ohjeen.