Способи оплати Abuse

Кроскомпіляція додатків Gotk3 для Windows у Linux

22.05.2021, 22:33

Що таке бібліотека Gotk3? Насамперед це набір біндингів інструменту створення графічних додатків GTK3, популярного в Linux для мови програмування GoLang. У Linux можна що завгодно зібрати без помилок. Однак програми на Golang кросплатформні, їх можна збирати також і для Windows, тому в користувача можуть виникнути певні труднощі.

Проблема в тому, що в середовищі Ubuntu виникає море помилок під час компіляції. Одна з найчастіших помилок fatal error: libintl.h: No such file or directory. Вона вказує на виникнення проблеми GoLang із пошуком потрібних заголовних файлів мови Сі. Але такої проблеми немає в ArchLinux.

Кроскомпіляція додатків Gotk3

З метою кроскомпіляції користувачам рекомендується використовувати 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

Збірка може зайняти досить тривалий час, але після її завершення ви побачите готовий файл у папці проєкту.

Після завершення встановлення користувач побачить готовий файл у папці проєкту:

Кроскомпіляція додатків Gotk3 для Windows у Linux

Щоб раз у раз не повторювати одні й ті самі дії, скористайтеся спеціальним 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

Після виконання команди з'явиться ідентифікатор нового контейнера:

Кроскомпіляція додатків Gotk3 для Windows у Linux

Потім можна запустити контейнер на основі отриманого образу командою:

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

На цьому інструкцію завершено.