Saltar al contenido

¿Cómo distribuir una aplicación GTK+ en Windows?

Te doy la bienvenida a nuestra página, aquí vas a hallar la solucíon a lo que necesitas.

Solución:

Tienes algunas pistas en la página de Windows del sitio web de GTK. Esta es la sección denominada Creación y distribución de su aplicación. Presenta una publicación de blog sobre la distribución de una aplicación GTK en Windows.

La solución propuesta allí es crear un paquete MSYS2 para su aplicación, y luego instalarlo y todas sus dependencias (GTK entre ellas) en un directorio específico, para que pueda redistribuir todo el paquete.

2020-12-09 EDITAR:

Al leer las otras respuestas, quiero agregar que este método no solo obtiene las dependencias para los objetos compartidos y los archivos binarios correctamente, sino que también debería funcionar con otros tipos de recursos (imágenes, archivos de ayuda, etc.) que están en los paquetes requeridos, así como objetos compartidos cargados en tiempo de ejecución con dlopenfunciones basadas en Esto es algo que no puedes obtener con solo llamar ldd para encontrar las dependencias.

resulta que corriendo ldd mygtkapp.exe (con el ldd proporcionado con MinGW) me dio una lista de todos los dll necesarios para que se ejecute. Para obtener solo los dlls que eran dependencias de gtk (y no, por ejemplo, dlls de Win32), utilicé el siguiente comando: ldd mygtkapp.exe | sed -n 's/([^ ]*) => /mingw.*/1/p' | sort. Mi programa usó los enlaces de Haskell, por lo que las dependencias pueden ser un poco diferentes, pero esto es lo que obtuve:

libatk-1.0-0.dll
libbz2-1.dll
libcairo-2.dll
libcairo-gobject-2.dll
libepoxy-0.dll
libexpat-1.dll
libffi-6.dll
libfontconfig-1.dll
libfreetype-6.dll
libgcc_s_seh-1.dll
libgdk_pixbuf-2.0-0.dll
libgdk-3-0.dll
libgio-2.0-0.dll
libglib-2.0-0.dll
libgmodule-2.0-0.dll
libgobject-2.0-0.dll
libgraphite2.dll
libgthread-2.0-0.dll
libgtk-3-0.dll
libharfbuzz-0.dll
libiconv-2.dll
libintl-8.dll
libpango-1.0-0.dll
libpangocairo-1.0-0.dll
libpangoft2-1.0-0.dll
libpangowin32-1.0-0.dll
libpcre-1.dll
libpixman-1-0.dll
libpixman-1-0.dll
libpng16-16.dll
libstdc++-6.dll
libwinpthread-1.dll
zlib1.dll

Tenga en cuenta también que hay un par de otras cosas que debe hacer para crear una aplicación completamente independiente, especialmente si está utilizando íconos comunes; para obtener más detalles sobre esto, consulte https://stackoverflow.com/a/34673860/7345298. Sin embargo, tenga en cuenta que necesitaba copiar el directorio 16×16 en lugar del directorio escalable.

EDITAR: De hecho, he encontrado que el siguiente comando también es muy útil: ldd mygtkapp.exe | grep '/mingw.*.dll' -o | xargs -I cp "" .. Este comando en realidad copia los dlls en el directorio actual, lo que elimina la necesidad de hacerlo laboriosamente usted mismo.

Se puede utilizar el siguiente procedimiento para obtener las DLL necesarias:

  1. Descargar Listdlls
  2. Deje su aplicación en ejecución
  3. Abra la ventana de PowerShell donde se encuentra Listdlls.exe
  4. Use el comando ./Listdlls.exe application_name.exe
  5. Copie todas las rutas enumeradas en un archivo de texto
  6. Elimine todas las líneas que contengan “C:WINDOWS*” en su archivo de texto
  7. Deje solo las líneas que contienen “C:msys64*…*.dll” en su archivo de texto
  8. Abra Msys2 Shell
  9. Use $ cp “paste_all_paths_from_dlls” “destination_path”

Precauciones antes de usar el $ pc dominio. En su archivo de texto, cambie “” a “/” en las rutas y elimine los saltos de línea.

Calificaciones y reseñas

Finalizando este artículo puedes encontrar los comentarios de otros gestores de proyectos, tú igualmente eres capaz insertar el tuyo si te gusta.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *