Metody płatności Abuse

Krzyżowa kompilacja aplikacji Gotk3 dla Windows do Linuksa

22.05.2021, 22:33

Czym jest biblioteka Gotk3? Jest to przede wszystkim zestaw wiązań GTK3, popularnego w Linuksie narzędzia do tworzenia aplikacji graficznych dla języka programowania GoLang. W systemie Linux można zbudować wszystko bez błędów. Jednak programy Golang są wieloplatformowe i mogą być tworzone również dla systemu Windows, więc użytkownik może mieć pewne trudności.

Problem polega na tym, że środowisko Ubuntu produkuje morze błędów podczas kompilacji. Jednym z częstych błędów jest fatal error: libintl.h: No such file or directory. Wskazuje on na problem GoLanga ze znalezieniem odpowiednich plików nagłówkowych C. Problem ten nie występuje jednak w ArchLinuksie.

Krzyżowa kompilacja aplikacji Gotk3

Do celów kompilacji krzyżowej zaleca się użytkownikom korzystanie z ArchLinux z DockerHub. Czasami pojawiają się błędy, a po pobraniu obrazu zobaczysz, jak je naprawić. Pierwszym krokiem jest pobranie obrazu i uruchomienie kontenera poprzez zamontowanie folderu z projektem za pomocą funkcji volume mount. Na przykład do folderu /project:

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

Używając opcji --rm, można usunąć kontener po wyjściu z niego. Ma to na celu zwolnienie miejsca na dysku twardym. W najnowszym obrazie ArchLinux występuje problem z glibc, przez co pacman nie działa. Aby to naprawić, uruchom to polecenie:

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

Czasami występują również problemy z kluczami. To nie jest działający system, więc powinieneś po prostu wyłączyć weryfikację pakietów, aby nie musieć za każdym razem szukać rozwiązania. Jak to zrobić. Aby to zrobić, w sekcji [options] pliku /etc/pacman. conf zmień parametr SigLevel na Never:

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

Następnie zaktualizuj bazę danych pakietów:

$ pacman -Sy

Zainstaluj wymagane pakiety:

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

Potrzebujemy również jednego pakietu z AUR. Aby go załadować, dodaj tę sekcję do pliku /etc/pacman.conf:

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

Następnie zainstaluj pakiet:

$ pacman -S mingw-w64-gtk3

Osobna uwaga: najnowsza wersja Golang zawiera już moduły Go. Jeśli z jakiegoś powodu nie są one używane w twoim projekcie, będziesz musiał zacząć z nich korzystać. Lepiej jest skonfigurować moduły i zależności projektu w systemie roboczym i sprawdzić, czy wszystko jest poprawnie zbudowane dla systemu Linux. Wersja gotk3 powinna być pobrana z gałęzi master, ponieważ starsze wersje nie są budowane z tą wersją języka:

$ got get github.com/gotk3/gotk3 master

Następnie przejdź do folderu projektu i uruchom polecenie kompilacji:

$ 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

Kompilacja może potrwać dość długo, ale po jej zakończeniu zobaczysz gotowy plik w folderze projektu.

Po zakończeniu instalacji użytkownik zobaczy gotowy plik w folderze projektu:

Krzyżowa kompilacja aplikacji Gotk3 dla Windows do Linuksa

Aby uniknąć powtarzania tych samych kroków za każdym razem, użyj specjalnego pliku Dockerfile:

$ 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że być konieczne majstrowanie przy nim i wprowadzanie zmian, aby działał.

Należy utworzyć osobny katalog, umieścić w nim ten plik i wykonać go:

$ docker build

Po wykonaniu polecenia pojawi się identyfikator nowego kontenera:

Krzyżowa kompilacja aplikacji Gotk3 dla Windows do Linuksa

Następnie można uruchomić kontener na podstawie uzyskanego obrazu za pomocą polecenia:

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

To kończy instrukcję.