LINUX.ORG.RU

Распространение GTK+ приложений под оффтопиком

 , , , ,


0

2

Написал программку с использованием GTK+. На онтопике все шикарно.

На оффтопике собирается с помощью MSYS2 и прекрасно запускается из консоли MSYS. Если просто кликнуть мышкой два раза по exe-шнику — ругается на отсутствие DLL-ок.

Запускаю в консоли msys: ldd programm_name.exe, он выдает большой список, половина dll из которого родные виндовые, половина MinGW-шные. Допилил мейкфайл, научил после компиляции exe-шника скармливать его ldd, затем копировать в специальный католог все нужные dll. Стало запускаться, только вылетает при попытке вызвать стандартный gtk-шный диалог. Алсо ругается на невозмжность загрузки png и нет иконок темы в меню. Все это работает, если запускать exe-шник из консоли msys.

Куда копать? Как это распростронять?

★★★★★

При старте прогамма ищет нужные ей библиотеки в текущем рабочем каталоге, потом в системных каталогах, перечисленных в переменной PATH.

Поэтому либо скопируй все нужные библиотеки в одну директория с exe файлом, либо пропиши в переменной PATH пути, в которых располагаются библиотеки.

Для теста можешь в командной строке windows прописать изменение переменной PATH, дописав в конец ее значения пути, разделенные точкой с запятой.

А на постоянной основе переменные окружения изменяются в свойствах системы.

Set PATH=%PATH%;C:\GTKLIBS\
MYPROGRAM.EXE
anonymous
()

Возможно грузит дллки динамически. Я копировал весь msys/mingw64/bin в папку проги, включал msys из path и после запуска удалял все в этой папке. Что не удалилось - значит юзается прогой. Попробуй, может так набор искомых дллок увеличишь.

нет иконок темы

Оно наверняка лежит в msys/mingw64/share/{icons,themes,...}. Другими словами ../share/{...} относительно пути дллок.

anonymous
()
Ответ на: комментарий от anonymous

Поэтому либо скопируй все нужные библиотеки в одну директория с exe файлом, либо пропиши в переменной PATH пути, в которых располагаются библиотеки.

Уже. Проблема не ушла. В PATH уже тоже все msys-ное прописал — не помогает

pihter ★★★★★
() автор топика
Ответ на: комментарий от andalevor

Интересно. Склонировал. Компилю. Посмотрю. Спасибо за наводку

pihter ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Я копировал весь msys/mingw64/bin в папку проги

Даже в этом случае ошибка не уходит

pihter ★★★★★
() автор топика

Алсо ругается на невозмжность загрузки png и нет иконок темы в меню.

значит иконки тоже нужно копировать

Harald ★★★★★
()
Ответ на: комментарий от pihter

ну значит ищи, откуда они грузятся

мож там префикс полным путём задан

ну и содержимое PATH в MSYS стоит посмотреть

Harald ★★★★★
()

1. В MSYS2: MinGW-w64 и новый gtk-3.0. И то и то поддерживает минимум Windows 7. Если нужны более старые версии Windows, то только MinGW (без w64) и gtk-3.16 из исходников.

2. Нужно положить вместе с exe файлом.

  • библиотеки (dll)
  • создать папку share и копировать папку icons из msys2
  • создать папку share\glib-2.0\schemas и копировать всё что есть в msys2\share\glib-2.0\schemas

https://imgur.com/a/LKD4AP4

P.P.S вообще можно уменьшить размер, если критично, не все иконки нужны из папки icons, а только те что использует приложение, но мне обычно лень...

fsb4000 ★★★★★
()
Последнее исправление: fsb4000 (всего исправлений: 4)
Ответ на: комментарий от fsb4000

MXE ,кстати, тоже не поддерживает Windows XP и Vista, по крайней мере master...

fsb4000 ★★★★★
()
Последнее исправление: fsb4000 (всего исправлений: 1)
Ответ на: комментарий от Harald

ну значит ищи, откуда они грузятся

Как? Я не смог придумать.

ну и содержимое PATH в MSYS стоит посмотреть

Это я уже. Дописал в виндовый PATH C:\mingw64\bin local ну и все прочее, где там не хватало — все еще не помогло

pihter ★★★★★
() автор топика
Ответ на: комментарий от fsb4000

В MSYS2: MinGW-w64 и новый gtk-3.0. И то и то поддерживает минимум Windows 7

Да... хотелось бы и для ХРюши, но она уже того. Так что пробую на семерке

Нужно положить вместе с exe файлом.

Положил — не помогает (

P.P.S вообще можно уменьшить размер, если критично

Да с размером будем разбираться когда заработает ) а пока я всю share скопировал — все одно при попытке вызвать опендиалог крашится

pihter ★★★★★
() автор топика
Ответ на: комментарий от fsb4000

с какой ошибкой кстати вылетает?

(cmgl_editor.exe:2652): Gtk-WARNING **: 15:58:59.820: Could not load image 'circ
le20.png': Couldn't recognize the image file format for file "c:\msys64\home\use
r\kbtt\soft\control_code_gen\cmgl_editor\w64_bin\circle20.png"

(cmgl_editor.exe:2652): Gtk-WARNING **: 15:59:00.397: Could not load a pixbuf fr
om icon theme.
This may indicate that pixbuf loaders or the mime database could not be found.
**
Gtk:ERROR:gtkiconhelper.c:494:ensure_surface_for_gicon: assertion failed (error
== NULL): Failed to load c:\msys64\home\user\kbtt\soft\control_code_gen\cmgl_edi
tor\w64_bin\share\icons\Adwaita\16x16/status\image-missing.png: Unrecognized ima
ge file format (gdk-pixbuf-error-quark, 3)
pihter ★★★★★
() автор топика
Ответ на: комментарий от anonymous

ищет нужные ей библиотеки в текущем рабочем каталоге

Вайновцы уверяли меня, что в новых виндах (после XP) это выпилили.

xvostostrel
()
Ответ на: комментарий от EXL

даже если все скопировать — не работает

у меня еще с парочкой слинковано. список не полный

pihter ★★★★★
() автор топика
Ответ на: комментарий от fsb4000

Попробуй поискать папку gdk-pixbuf-2.0, и скопируй её рядом с экзешником.

Не помогло

pihter ★★★★★
() автор топика
Ответ на: комментарий от xvostostrel

Вайновцы уверяли меня, что в новых виндах (после XP) это выпилили.

Ну ты ж попробуй — не выпилили (по крайней мере в семере)

pihter ★★★★★
() автор топика
Ответ на: комментарий от pihter

Да. Для товарища вендузоида собирал какую-то простую программку с одной кнопкой файлового диалога, вроде всё получилось.

andalevor ★★
()

Если нужно дерево зависимостей глянуть, то попробуй http://www.dependencywalker.com/

Для мониторинга активности процесса (файлы, реестр, сеть, прочее) есть https://docs.microsoft.com/en-us/sysinternals/downloads/procmon

По крайней мере увидишь, откуда оно вообще пытается читать ресурсы и что-то грузить.

Radjah ★★★★★
()

Приехал домой, проверил на msys2. Баг подтверждаю:

https://imgur.com/a/CMAcqqT

Решение:

Копируешь папку gdk-pixbuf-2.0 в lib/gdk-pixbuf-2.0/ рядом с exe файлом.

Вообщем вот рабочий пример собранный msys2:

https://yadi.sk/d/vlkBEbA3gD3_vw

Вероятная причина, по которой собственноручно скомпилированный gtk3 не требовал эту папку у меня, я собирал gdk-pixbuf так :(

gdk-pixbuf
./configure --prefix=/mingw --enable-shared --enable-static --with-included-loaders -disable-modules

fsb4000 ★★★★★
()
Последнее исправление: fsb4000 (всего исправлений: 1)
Ответ на: комментарий от Radjah

Депенденсиволкер я уже опробовал — он не осилил. Ошибки кажет и dll-ок находит на порядок меньше, чем MSYS-ный ldd.

А вторая ссылка просто божественна. Большое спасибо

pihter ★★★★★
() автор топика
Ответ на: комментарий от fsb4000

Копируешь папку gdk-pixbuf-2.0 в lib/gdk-pixbuf-2.0/ рядом с exe файлом.

Спасибо большое, помогло. Но это решило только проблему с иконками и png-картинками. Теперь при попытк вызвать опендиалог вылетает с другой ошибкой:

(cmgl_editor.exe:1844): GLib-GIO-ERROR **: 21:32:05.497: No GSettings schemas ar
e installed on the system

попробовал повторить финт, который ты посоветовал выше, с каталогом ./lib/glib-2.0 но не фартануло

pihter ★★★★★
() автор топика
Ответ на: комментарий от pihter

glib, нужно не в lib, а в share

Вообще нужна не вся папка, а только один файл:

Без файла share\glib-2.0\schemas\gschemas.compiled

(gtk3-demo.exe:27892): GLib-GIO-ERROR **: 21:42:14.450: No GSettings schemas are installed on the system

С файлом: всё ок

fsb4000 ★★★★★
()
Последнее исправление: fsb4000 (всего исправлений: 3)
Ответ на: комментарий от RazrFalcon

Мой пост был не о нём, хотя к нему это слово тоже можно применить.

eternal_sorrow ★★★★★
()

Кстати, можно посмотреть, как конкретно gtk упакован в Meld, Gajim. По-моему, там всё что нужно в скрипте.

gag ★★★★★
()
19 июня 2019 г.
Ответ на: комментарий от Harald

На червоно-чорному прапорі, с разделением явно не по диагонали, чем не спутаешь флаг одной запрещённой в рф организации с анахистским знаменем, смайлик похожий на гитлера наблюдает за горящими фигурками, символизирующими судя по всему «хохлов, ватников, пиндосов».

Что за хуйня у вас на аватаре, что вы хотите этим сказать?

hikikomori ★★★
()
Ответ на: комментарий от hikikomori

«смайлик похожий на гитлера» - это толстый намёк на одного модератора с альтернативным цветом волос, который забанил трёх почтенных регистрантов, последние аватарки которых изображены горящими в топке лорокоста в нижней части аватарки

Harald ★★★★★
()
Ответ на: комментарий от gag

Я кстати еще в универе очень много лабораторных на Gtk строчил.

И Gtk+, и Gtkmm, и Gtk2Hs, и Gtk/Gjs и даже Java-Gnome и Gtk#. Почти все работало на Windows сходу, после простой пересборки.

Интересно даже было один и тот же UI XML грузить в разных языках, писать код и смотреть рантайм характеристики визуально неотличимых приложений

vertexua ★★★★★
()
Последнее исправление: vertexua (всего исправлений: 2)
29 октября 2019 г.
Ответ на: комментарий от pihter

Если на телефон, то лучше на этот: +7 999 475-81-08

fsb4000 ★★★★★
()
Ответ на: комментарий от fsb4000

А, уже не надо: оказывается можно было с банковской приложухи, без завода киви кошелька. Отправил, спасибо

pihter ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.