Автор Тема: GTK+ компиляция для Windows  (Прочитано 6001 раз)

Оффлайн Zanzarah

  • Участник
  • *
  • Сообщений: 62
GTK+ компиляция для Windows
« : 07.06.2020 12:13:22 »
Доброго времени суток, дамы и господа, леди и джентельмены!

Будьте добры, подскажите пожалуйста как скомпилировать GTK-приложение в Linux для Windows с помощью minGW?
По примеру сделал все манипуляции. В терминале:

x86_64-w64-mingw32-g++-win32 gtk1_port.cpp -o executable.exe `pkg-config --cflags --libs gtk+-3.0` -I/usr/include/postgresql
Вывод:
Спойлер
In file included from /usr/lib/x86_64-linux-gnu/glib-2.0/include/glibconfig.h:9:0,
                 from /usr/include/glib-2.0/glib/gtypes.h:32,
                 from /usr/include/glib-2.0/glib/galloca.h:32,
                 from /usr/include/glib-2.0/glib.h:30,
                 from /usr/include/gtk-3.0/gdk/gdkconfig.h:13,
                 from /usr/include/gtk-3.0/gdk/gdk.h:30,
                 from /usr/include/gtk-3.0/gtk/gtk.h:30,
                 from gtk1_port.cpp:1:
/usr/include/glib-2.0/glib/gtypes.h: In function ‘gboolean _GLIB_CHECKED_ADD_U64(guint64*, guint64, guint64)’:
/usr/include/glib-2.0/glib/gmacros.h:142:29: error: size of array ‘_GStaticAssertCompileTimeAssertion_0’ is negative
   __attribute__((__unused__))
                             ^
/usr/include/glib-2.0/glib/gmacros.h:232:120: note: in expansion of macro ‘G_GNUC_UNUSED’
 #define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
                                                                                                                        ^~~~~~~~~~~~~
/usr/include/glib-2.0/glib/gtypes.h:423:3: note: in expansion of macro ‘G_STATIC_ASSERT’
   G_STATIC_ASSERT(sizeof (unsigned long long) == sizeof (guint64));
   ^~~~~~~~~~~~~~~
In file included from /usr/include/glib-2.0/gio/gio.h:46:0,
                 from /usr/include/gtk-3.0/gdk/gdkapplaunchcontext.h:28,
                 from /usr/include/gtk-3.0/gdk/gdk.h:32,
                 from /usr/include/gtk-3.0/gtk/gtk.h:30,
                 from gtk1_port.cpp:1:
/usr/include/glib-2.0/gio/gcredentials.h: At global scope:
/usr/include/glib-2.0/gio/gcredentials.h:75:1: error: ‘uid_t’ does not name a type
 uid_t            g_credentials_get_unix_user      (GCredentials    *credentials,
 ^~~~~
/usr/include/glib-2.0/gio/gcredentials.h:79:52: error: ‘uid_t’ has not been declared
                                                    uid_t           uid,
                                                    ^~~~~

в чем подвох?

P.S. пробовал на Win установить, но MSYS2 меня унизил и отказался загружать все пакеты хотя бы для себя, а vcpkg через прокси не очень работает, да и все пакеты (которые просит) уже в архиве и на задворках, что смог скачал ручками, а из-за проверка hash-суммы аналоги (например было v3.3.tar.gz, а теперь libffi-3.3.tar.gz) выплевывает.

Заранее спасибо (:
"Для кого и командная строка дружелюбный интерфейс" (С)

Оффлайн trs

  • Участник
  • *
  • Сообщений: 287
Re: GTK+ компиляция для Windows
« Ответ #1 : 09.06.2020 07:46:44 »
/usr/include/glib-2.0/glib/gtypes.h:423:3: note: in expansion of macro ‘G_STATIC_ASSERT’
   G_STATIC_ASSERT(sizeof (unsigned long long) == sizeof (guint64));
Assert срабатывает, поскольку при трансляции guint64 оказывается размером 32 бита, как ни странно. Не требуется ли тут ключ -m64? Я бы поискал инструкцию посвежее, в той описана сборка 32-х разрядной версией.

Оффлайн Zanzarah

  • Участник
  • *
  • Сообщений: 62
Re: GTK+ компиляция для Windows
« Ответ #2 : 09.06.2020 18:34:05 »
В общем поднял виртуалку. В нее воткнул MSYS2. все что надо скачал, поставил, запустил. в терминале: x86_64-w64-mingw32-g++ gtk1_port -o gtk2.exe `pkg-config --cflags --libs gtk+-3.0` -I/mingw64/include/postgresql -lpq при запуске ошибка: 0xc000007b

так же пробовал использовать gtk+-win32-3.0.pc

"Для кого и командная строка дружелюбный интерфейс" (С)

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 20 167
    • Домашняя страница
Re: GTK+ компиляция для Windows
« Ответ #3 : 09.06.2020 19:57:22 »
В общем поднял виртуалку. В нее воткнул MSYS2. все что надо скачал, поставил, запустил. в терминале: x86_64-w64-mingw32-g++ gtk1_port -o gtk2.exe `pkg-config --cflags --libs gtk+-3.0` -I/mingw64/include/postgresql -lpq при запуске ошибка: 0xc000007b

так же пробовал использовать gtk+-win32-3.0.pc
А через Cygwin не проще собрать под Windows? Никогда с ним проблем не было.
Андрей Черепанов (cas@)

Оффлайн Zanzarah

  • Участник
  • *
  • Сообщений: 62
Re: GTK+ компиляция для Windows
« Ответ #4 : 14.06.2020 07:57:42 »
До Cygwin не дошло. Все получилось на mingw. Однако возникла проблема. При запуске программы открывается окно с командной строкой. (Вообще интересно, уместо ли такой вопрос на таком форуме поднимать) А в командной строке такие дела (скрин прилагается)

P.S. без select'а так же появлялось окно.
"Для кого и командная строка дружелюбный интерфейс" (С)

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 20 167
    • Домашняя страница
Re: GTK+ компиляция для Windows
« Ответ #5 : 14.06.2020 10:46:46 »
Я предложил работающий проверенный вариант без извращений. На сборке Qt на Cygwin этих проблем нет.
Андрей Черепанов (cas@)

Оффлайн trs

  • Участник
  • *
  • Сообщений: 287
Re: GTK+ компиляция для Windows
« Ответ #6 : 14.06.2020 12:08:28 »
Для Win32 возможно два типа приложений: оконные (GUI) и консольные (CUI), в последнем случае система открывает окно консоли при запуске. Что бы собрать GUI приложение в MinGW применяется ключ -mwindows (по умолчанию -mconsole).

Оффлайн Zanzarah

  • Участник
  • *
  • Сообщений: 62
Re: GTK+ компиляция для Windows
« Ответ #7 : 15.06.2020 16:06:16 »
Для Win32 возможно два типа приложений: оконные (GUI) и консольные (CUI), в последнем случае система открывает окно консоли при запуске. Что бы собрать GUI приложение в MinGW применяется ключ -mwindows (по умолчанию -mconsole).
Спасибо, помогло!

Всем спасибо! Все насущные вопросы решены (:

PS
Я предложил работающий проверенный вариант без извращений. На сборке Qt на Cygwin этих проблем нет.
Я попробую CygWin, обещаю (:
"Для кого и командная строка дружелюбный интерфейс" (С)