Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Linux компилятор на Windows (Gtk-3).  (Прочитано 2127 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн victor00000

  • Автор темы
  • Старожил
  • *
  • Сообщений: 15568
  • Глухонемой (Deaf)
    • Просмотр профиля
Linux компилятор на Windows (Gtk-3).
« : 16 Января 2015, 13:13:32 »
Linux компилятор на Windows (Gtk-3).
[/b]

1 Установки пакеты.
sudo apt-get install wine mingw32 build-essential

2. скачать на папку и скрипт.
cd
sudo mkdir -p /srv/win32builder/fixed_364/build/win32/
wget -c http://win32builder.gnome.org/gtk+-bundle_3.6.4-20130921_win32.zip
sudo unzip gtk+-bundle_3.6.4-20130921_win32.zip -d /srv/win32builder/fixed_364/build/win32/
cat << 'EOF' | sudo tee /usr/bin/i586-mingw32msvc-pkg-config
#!/bin/sh
PREFIX=/srv/win32builder/fixed_364/build/win32
export PKG_CONFIG_LIBDIR=$PREFIX/lib/pkgconfig
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH_MINGW32MSVC
pkg-config "$@"
EOF
sudo chmod +x /usr/bin/i586-mingw32msvc-pkg-config

3. скоро тестировано Gtk!.
cd
mkdir gtk3-test
cd gtk3-test
cat << 'EOF' > test.c
#include <gtk/gtk.h>
int
main (int   argc, char *argv[])
{
  GtkWidget *window;
  gtk_init (&argc, &argv);
  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
  gtk_widget_show (window);
  gtk_main ();
  return 0;
}
EOF

i586-mingw32msvc-gcc test.c -o test.exe `i586-mingw32msvc-pkg-config --cflags --libs gtk+-3.0`
cp /srv/win32builder/fixed_364/build/win32/*/*.dll ./
wine ./test.exe

Всё.

Wars ~.o

Оффлайн john1400

  • Активист
  • *
  • Сообщений: 581
  • debian
    • Просмотр профиля
Re: Linux компилятор на Windows (Gtk-3).
« Ответ #1 : 29 Января 2015, 16:33:19 »
в смысле без GTK+ либы установленной в винде
запуститить голый test.exe и отрисует окно ?

Пользователь решил продолжить мысль 29 Января 2015, 16:34:25:
алхимия прямо какая то

Оффлайн TheDrone

  • Новичок
  • *
  • Сообщений: 22
    • Просмотр профиля
Re: Linux компилятор на Windows (Gtk-3).
« Ответ #2 : 04 Февраля 2015, 10:24:52 »
И это работает! Круто! 8)

А что делать с ошибкой "Glib-GIO-ERROR **: No GSettings schemas are installed on the system", возникающей при вызове диалогового окна?

Кстати, чтобы в Windows не открывалось дополнительное окно, к команде компиляции нужно добавить: -mwindows.
И последнее, если скомпилировать так программу и запустить её под windows, то Kaspersky почему-то будет со всей своей настойчивостью кричать, что это троян. Если компилировать без "-mwindows", то не будет. ???

Оффлайн victor00000

  • Автор темы
  • Старожил
  • *
  • Сообщений: 15568
  • Глухонемой (Deaf)
    • Просмотр профиля
Re: Linux компилятор на Windows (Gtk-3).
« Ответ #3 : 04 Февраля 2015, 10:44:15 »
Цитировать
cp /srv/win32builder/fixed_364/build/win32/*/*.dll ./
видите? библитеки dll на c:/windows/system32/.
Wars ~.o

Оффлайн TheDrone

  • Новичок
  • *
  • Сообщений: 22
    • Просмотр профиля
Re: Linux компилятор на Windows (Gtk-3).
« Ответ #4 : 04 Февраля 2015, 14:49:36 »
Нда... Нет, я не об этом. Усовершенствуем чуточку ваш пример:
#include <gtk/gtk.h>
GtkWidget *window;

void open_file_chooser ()
{
    GtkWidget *dialog;
    dialog = gtk_file_chooser_dialog_new ("Open File",
GTK_WINDOW (window),
                                          GTK_FILE_CHOOSER_ACTION_OPEN,
                                          "Cancel",
                                          GTK_RESPONSE_CANCEL,
                                          "Open",
                                          GTK_RESPONSE_ACCEPT,
                                          NULL);
   
    gtk_dialog_run (GTK_DIALOG (dialog));
    gtk_widget_destroy (dialog);
}

int main (int   argc, char *argv[])
{
  GtkWidget *button;
  gtk_init (&argc, &argv);
  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
  button = gtk_button_new_with_label ("Открыть файл");
  g_signal_connect (button, "clicked", G_CALLBACK (open_file_chooser), NULL);
  gtk_container_add (GTK_CONTAINER (window), button);
  gtk_widget_show_all (window);
  gtk_main ();
  return 0;
}

Теперь в нашем окне появилась кнопка, которая вызывает диалоговое окно выбора файла. Если скомпилировать и запустить эту программу в ОС Windows или при помощи wine, то само окно с кнопкой откроется, а вот если нажать на кнопку, выскочит ошибка: "Glib-GIO-ERROR **: No GSettings schemas are installed on the system". Проверьте.  ;)

Оффлайн victor00000

  • Автор темы
  • Старожил
  • *
  • Сообщений: 15568
  • Глухонемой (Deaf)
    • Просмотр профиля
Wars ~.o

Оффлайн TheDrone

  • Новичок
  • *
  • Сообщений: 22
    • Просмотр профиля
Re: Linux компилятор на Windows (Gtk-3).
« Ответ #6 : 04 Февраля 2015, 18:06:22 »
Я не понимаю, как это поможет мне избавиться от ошибки? Ведь, если я делаю:
$ gcc name.c -o name.out `pkg-config --cflags --libs gtk+-3.0`
$ ./name.out
То все работает. Проблема же возникает под wine и windows. ???

Оффлайн victor00000

  • Автор темы
  • Старожил
  • *
  • Сообщений: 15568
  • Глухонемой (Deaf)
    • Просмотр профиля
Re: Linux компилятор на Windows (Gtk-3).
« Ответ #7 : 04 Февраля 2015, 18:57:47 »
TheDrone,
бывает
$ gcc `pkg-config --cflags gtk+-3.0` name.c -o name.out `pkg-config --libs gtk+-3.0`

Пользователь решил продолжить мысль 04 Февраля 2015, 19:14:13:
« Последнее редактирование: 04 Февраля 2015, 19:14:14 от victor00000 »
Wars ~.o

Оффлайн TheDrone

  • Новичок
  • *
  • Сообщений: 22
    • Просмотр профиля
Re: Linux компилятор на Windows (Gtk-3).
« Ответ #8 : 23 Февраля 2015, 09:12:12 »
"You also need to copy share\glib-2.0\schemas\*
also schemas should be compiled, there should be a file named gschemas.compiled inside the schemas folder."
Или другими словами: помимо копирования dll файлов, в папке с нашим скомпилированным файлом нужно создать share\glib-2.0\schemas\ и скопировать туда содержимое соответствующей папки из скаченного нами gtk архива. :)
Важно чтобы в папке schemas был файл "gschemas.compiled". У меня он там был, и все заработало.))

 

Страница сгенерирована за 0.018 секунд. Запросов: 22.