Zahlungsmethoden Abuse

Kreuzkompilierung von Gotk3-Anwendungen für Windows zu Linux

22.05.2021, 22:33

Was ist die Gotk3-Bibliothek? Es handelt sich in erster Linie um eine Reihe von Bindungen von GTK3, einem unter Linux beliebten Werkzeug zur Erstellung grafischer Anwendungen für die Programmiersprache GoLang. Unter Linux kann man alles ohne Bugs erstellen. Allerdings sind Golang-Programme plattformübergreifend und können auch für Windows erstellt werden, so dass der Benutzer einige Schwierigkeiten haben kann.

Das Problem ist, dass die Ubuntu-Umgebung während der Kompilierung ein Meer von Fehlern produziert. Einer der häufigsten Fehler ist fatal error: libintl.h: No such file or directory. Dies deutet auf ein GoLang-Problem bei der Suche nach den richtigen C-Header-Dateien hin. Dieses Problem gibt es in ArchLinux jedoch nicht.

Kreuzkompilierung von Gotk3-Anwendungen

Zum Zweck der Cross-Kompilierung wird empfohlen, ArchLinux mit DockerHub zu verwenden. Manchmal treten Fehler auf, und nach dem Herunterladen des Images werden Sie sehen, wie Sie diese beheben können. Der erste Schritt besteht darin, das Image herunterzuladen und den Container zu starten, indem Sie einen Ordner mit Ihrem Projekt darin mit volume mount mounten. Zum Beispiel in den Ordner /project:

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

Mit der Option --rm können Sie den Container löschen, nachdem Sie ihn beendet haben. Dies geschieht, um Speicherplatz auf der Festplatte freizugeben. Im neuesten ArchLinux-Image gibt es ein Problem mit der glibc, weshalb pacman nicht funktioniert. Um es zu beheben, führen Sie diesen Befehl aus:

$ 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"

Manchmal gibt es auch Probleme mit Schlüsseln. Dies ist kein funktionierendes System, also sollten Sie die Paketüberprüfung einfach deaktivieren, damit Sie nicht jedes Mal nach einer Lösung suchen müssen. Wie man das macht. Dazu ändern Sie im Abschnitt [options] der Datei /etc/pacman.conf den Parameter SigLevel auf Never:

$ vim /etc/pacman.conf
[options]
SigLevel = Never

Aktualisieren Sie anschließend die Paketdatenbank:

$ pacman -Sy

Installieren Sie die benötigten Pakete:

$ pacman -S git go vim mingw-w64-gcc cairo pango pkg-config gtk3

Wir benötigen auch ein Paket von AUR. Um es zu laden, fügen Sie diesen Abschnitt zu /etc/pacman.conf hinzu:

$ vim /etc/pacman.conf
[ownstuff]
SigLevel = Never
Server = http://martchus.no-ip.biz/repo/arch/$repo/os/$arch

Installieren Sie dann das Paket:

$ pacman -S mingw-w64-gtk3

Unabhängig davon enthält die neueste Version von Golang bereits Go-Module. Wenn diese aus irgendeinem Grund nicht in Ihrem Projekt verwendet werden, müssen Sie sie verwenden. Es ist besser, die Module und Abhängigkeiten des Projekts auf Ihrem Arbeitssystem zu konfigurieren und zu überprüfen, ob alles korrekt für Linux gebaut ist. Die gotk3-Version sollte aus dem Master-Zweig genommen werden, da ältere Versionen nicht mit dieser Version der Sprache gebaut werden:

$ got get github.com/gotk3/gotk3 master

Gehen Sie dann in den Projektordner und führen Sie den Build-Befehl aus:

$ 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

Der Build kann recht lange dauern, aber wenn er abgeschlossen ist, sehen Sie die fertige Datei im Projektordner.

Wenn die Installation abgeschlossen ist, sieht der Benutzer die fertige Datei im Projektordner:

Kreuzkompilierung von Gotk3-Anwendungen für Windows zu Linux

Um zu vermeiden, dass sich die gleichen Schritte immer wiederholen, verwenden Sie eine spezielle Dockerdatei:

$ 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

Möglicherweise müssen Sie daran herumpfuschen und Änderungen vornehmen, damit es funktioniert.

Sie müssen ein separates Verzeichnis erstellen, diese Datei darin ablegen und sie ausführen:

$ docker build

Nach dem Ausführen des Befehls wird die ID des neuen Containers angezeigt:

Kreuzkompilierung von Gotk3-Anwendungen für Windows zu Linux

Dann können Sie den Container auf der Grundlage des erhaltenen Images mit dem Befehl starten:

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

Damit ist die Anweisung abgeschlossen.