Что такое библиотека Gotk3? В первую очередь это набор биндингов инструмента создания графических приложений GTK3, популярного в Linux для языка программирования GoLang. В Linux можно что угодно собрать без ошибок. Однако программы на Golang кроссплатформенные, их можно собирать также и для Windows, поэтому у пользователя могут возникнуть определенные трудности.
Проблема в том, что в среде Ubuntu возникает море ошибок во время компиляции. Одно из частых ошибок fatal error: libintl.h: No such file or directory. Она указывает на возникновие проблемы GoLang с поиском нужных заголовочных файлов языка Си. Но такой проблемы нет в ArchLinux.
С целью кросскомпиляции пользователям рекомендуется использовать ArchLinux с DockerHub. Иногда возникают ошибки и после загрузки образа будет видно, каким образом их можно исправить. Сперва следует загрузить образ и запустить контейнер, пробросив в него с помощью volume монтирования папку со своим проектом. Например, в папку /project:
$ docker run -it --rm -v ~/go/src/KeywordsMixer/:/project archlinux/archlinux bash
За счет опции --rm можно удалить контейнер после выхода из него. Это делается для освобождения свободного места на жестком диске. В свежем образе ArchLinux есть проблема с glibc, из-за неё не работает pacman. Для исправления выполните такую команду:
$ 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"
Также иногда возникают проблемы с ключами. Это не рабочая система, поэтому следует просто отключить верификацию пакетов, чтобы каждый раз не искать решение этой проблемы. Как это делается? Для этого в секции [options] файла /etc/pacman.conf измените значение параметра SigLevel на Never:
$ vim /etc/pacman.conf
Дальше обновите базу данных пакетов:
$ pacman -Sy
Установите необходимые пакеты:
$ pacman -S git go vim mingw-w64-gcc cairo pango pkg-config gtk3
Ещё нам понадобится один пакет из AUR. Для его загрузки добавьте такую секцию в /etc/pacman.conf:
$ vim /etc/pacman.conf
Затем установите пакет:
$ pacman -S mingw-w64-gtk3
Отдельно следует отметить, что в последней версии Golang уже включены модули Go. Если по каким-либо причинам они не испольются в вашем проекте, придется начать использовать. Настроить модули и зависимости проекта лучше в вашей рабочей системе и проверить что всё верно собирается для Linux. Версию gotk3 стоит брать из ветки master, потому что более старые версии не собираются с этой версией языка:
$ got get github.com/gotk3/gotk3 master
Дальше перейдите в папку с проектом и выполните команду сборки:
$ 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
Сборка может занять довольно продолжительное время, но после её завершения вы увидите готовый файл в папке проекта:
После завершения установки пользователь увидит готовый файл в папке проекта:
Чтобы из раза в раз не повторять одни и теже действия, воспользуйтесь специальным Dockerfile:
$ vi Dockerfile
Возможно, вам придется поколдовать над ним и внести изменения, чтобы он начал работать.
Необходимо создать отдальный каталог, поместить в него этот файл и выполнить:
$ docker build
После выполнения команды появится идентификатор нового контейнера:
Затем можно запустить контейнер на основе полученного образа командой:
$ docker run -it --rm -v ~/go/src/KeywordsMixer/:/project 028451c45c15 bash
На этом инструкция завершена.