Начини на плащане Abuse

Кръстосано компилиране на приложенията Gotk3 за Windows към Linux

22.05.2021, 22:33

Какво представлява библиотеката Gotk3? Това е предимно набор от свързвания на GTK3, популярен в Linux инструмент за създаване на графични приложения на езика за програмиране GoLang. В Linux можете да създавате всичко без грешки. Програмите на Golang обаче са междуплатформени и могат да се създават и за Windows, така че потребителят може да срещне известни трудности.

Проблемът се състои в това, че средата на Ubuntu произвежда море от грешки по време на компилирането. Една от често срещаните грешки е фаталната грешка: libintl.h: No such file or directory. Тя показва проблем на GoLang с намирането на правилните заглавни файлове на C. Но този проблем не съществува в ArchLinux.

Кръстосано компилиране на приложения на Gotk3

За целите на кръстосаното компилиране на приложенията на потребителите се препоръчва да използват ArchLinux с DockerHub. Понякога се появяват грешки и след като изтеглите изображението, ще видите как да ги отстраните. Първата стъпка е да изтеглите образа и да стартирате контейнера, като монтирате папка с вашия проект в нея с помощта на volume mount. Например, към папката /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 трябва да се вземе от главния клон, защото по-старите версии не са изградени с тази версия на езика:

$ 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

За да избегнете повтарянето на едни и същи стъпки всеки път, използвайте специален файл на Docker:

$ 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

С това инструкцията е завършена.