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