¿Qué es la biblioteca Gotk3? Principalmente es un conjunto de bindings de GTK3, una herramienta de creación de aplicaciones gráficas popular en Linux para el lenguaje de programación GoLang. En Linux, se puede construir cualquier cosa sin errores. Sin embargo, los programas Golang son multiplataforma y pueden construirse también para Windows, por lo que el usuario puede tener algunas dificultades.
El problema es que el entorno Ubuntu produce un mar de errores durante la compilación. Uno de los errores frecuentes es el error fatal: libintl.h: No such file or directory
. Indica un problema de GoLang para encontrar los archivos de cabecera C adecuados. Pero este problema no existe en ArchLinux.
Para la compilación cruzada, se recomienda a los usuarios utilizar ArchLinux con DockerHub. A veces se producen errores y después de descargar la imagen, verás cómo solucionarlos. El primer paso es descargar la imagen e iniciar el contenedor montando una carpeta con tu proyecto en ella usando volume
mount. Por ejemplo, a la carpeta /project
:
$ docker run -it --rm -v ~/go/src/KeywordsMixer/:/project archlinux/archlinux bash
Usando la opción --rm
, puedes borrar el contenedor después de salir de él. Esto se hace para liberar espacio en el disco duro. Hay un problema con glibc
en la última imagen de ArchLinux, debido al cual pacman
no funciona. Para arreglarlo, ejecute este comando:
$ 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"
A veces también hay problemas con las claves. Este no es un sistema que funcione, así que debería desactivar la verificación de paquetes para no tener que buscar una solución cada vez. Cómo hacerlo. Para ello, en la sección [options]
del fichero /etc/pacman.conf
, cambia el parámetro SigLevel
a Never
:
$ vim /etc/pacman.conf
[options]
SigLevel = Never
A continuación, actualice la base de datos de paquetes:
$ pacman -Sy
Instala los paquetes necesarios:
$ pacman -S git go vim mingw-w64-gcc cairo pango pkg-config gtk3
También necesitamos un paquete de AUR
. Para cargarlo, añade esta sección a /etc/pacman.conf
:
$ vim /etc/pacman.conf
[ownstuff]
SigLevel = Never
Server = http://martchus.no-ip.biz/repo/arch/$repo/os/$arch
Luego instala el paquete:
$ pacman -S mingw-w64-gtk3
Por otro lado, la última versión de Golang ya incluye módulos Go. Si por alguna razón no se utilizan en tu proyecto, tendrás que empezar a utilizarlos. Es mejor configurar los módulos y dependencias del proyecto en tu sistema de trabajo y comprobar que todo está construido correctamente para Linux. La versión gotk3 debe tomarse de la rama maestra
, porque las versiones anteriores no se construyen con esta versión del lenguaje:
$ got get github.com/gotk3/gotk3 master
A continuación, vaya a la carpeta del proyecto y ejecute el comando build:
$ 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
La compilación puede tardar bastante tiempo, pero cuando termine verá el archivo terminado en la carpeta del proyecto.
Una vez finalizada la instalación, el usuario verá el archivo terminado en la carpeta del proyecto:
Para evitar repetir los mismos pasos una y otra vez, utiliza un Dockerfile especial:
$ 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
Puede que tengas que juguetear con él y hacer cambios para que funcione.
Necesitas crear un directorio separado, colocar este archivo en él y ejecutarlo:
$ docker build
Después de ejecutar el comando, aparecerá el ID del nuevo contenedor:
A continuación, puede iniciar el contenedor basado en la imagen obtenida con el comando:
$ docker run -it --rm -v ~/go/src/KeywordsMixer/:/project 028451c45c15 bash
Esto completa la instrucción.