Що таке бібліотека 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
[options]
SigLevel = Never
Далі оновіть базу даних пакетів:
$ pacman -Sy
Встановіть необхідні пакети:
$ pacman -S git go vim mingw-w64-gcc cairo pango pkg-config gtk3
Ще нам знадобиться один пакет з AUR
. Для його завантаження додайте таку секцію в /etc/pacman.conf
:
$ vim /etc/pacman.conf
[ownstuff]
SigLevel = Never
Server = http://martchus.no-ip.biz/repo/arch/$repo/os/$arch
Потім встановіть пакет:
$ 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
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
Можливо, вам доведеться поворожити над ним і внести зміни, щоб він почав працювати.
Необхідно створити окремий каталог, помістити в нього цей файл і виконати:
$ docker build
Після виконання команди з'явиться ідентифікатор нового контейнера:
Потім можна запустити контейнер на основі отриманого образу командою:
$ docker run -it --rm -v ~/go/src/KeywordsMixer/:/project 028451c45c15 bash
На цьому інструкцію завершено.