Кросс-компиляция GTK в Fedora с использованием MinGW

У меня установлена ​​Fedora (последняя), а также пакеты mingw32 и gtk.

Я написал простой Hello world:

#include <gtk/gtk.h>

int main(int argc, char* argv[]){
    GtkWidget *window;

    gtk_init(&argc, &argv);
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_widget_show(window);

    gtk_main();

    return 0;
}

Я могу легко скомпилировать его под Fedora с помощью:

gcc -o hello hello.c 'pkg-config --libs --cflags gtkmm-3.0'

(неправильные апострофы здесь)

Я также попытался скомпилировать простую программу printf("Hello world"); (без gtk) для окон с: i686-pg-mingw32-gcc simple.c -o simple.exe, и она отлично работала под Windows

Но чего я не могу, так это кросс-компиляции для Windows с использованием GTKmm (даже пример с другой версией GTK был бы великолепен). Я прочитал это http://camltastic.blogspot.com/2008/10/mingw-compile-software-for-windows.html, но он использует configure и make, которых у меня нет для моих программ.

Также там много: http://ricardo.ecn.wfu.edu/~cottrell/cross-gtk/, но там говорится об установке mingw самостоятельно в пользовательскую папку и так далее... но я установил mingw с помощью Fedora yum.

Обновлять

Обновление после всех советов Родриго:

ДА! Мы сделали это! Это работает. Сначала запускается консоль, но неважно. Я также не тестировал все библиотеки GTK, но думаю, что они тоже должны работать.

После года попыток я наконец получил это, и я ближе всего к разработке приложений с графическим интерфейсом, чем когда-либо. Так что большое спасибо за ваше терпение и руководство. Я думаю, что теперь я тоже как-то понял, как это все работает (я имею в виду, скомпилированные либы для разных ОС, pkg-config, передача переменных и т.д.)


person PhoenixS    schedule 02.12.2011    source источник
comment
Дополнительный совет: вы можете удалить консоль, передав -mwindows (по умолчанию -mconsole) команде компоновщика. Но лично я считаю полезным в отладочных сборках видеть предупреждения GLIB и другие выходные данные.   -  person rodrigo    schedule 05.12.2011


Ответы (1)


Вы установили mingw из репозиториев Fedora, но вам по-прежнему нужны библиотеки GTK, скомпилированные для Windows. Вы можете скомпилировать их самостоятельно (не тривиально, но и не очень сложно) или загрузить их в другом месте, как предлагает страница, которую вы цитируете.

ОБНОВЛЕНИЕ: о ваших попытках в комментариях ниже:

Я исправил файлы ПК, которые скопировал в /usr/lib/pkgconfig, и вот мой журнал: pastebin.com/KZr8tMQ0 Я действительно не понимаю. Когда я запускаю pkg-config, отсутствует объект gobject. Когда я запускаю его как root, gdk отсутствует. Когда я запускаю его с gtkmm-3.0, он генерирует параметры... когда я запускаю его с gtkmm-2.4, происходит сбой, даже если gtkmm-2.4 на самом деле единственный файл gtkmm pc, который у меня есть в папке, установленной в PKG_CONFIG_PATH.

  • У вас нет ни gtk-3.0, ни gtkmm-3.0 для Windows. Поэтому неудивительно, что он говорит: Пакет gtkmm-3.0 не найден в пути поиска pkg-config. Используйте 1_ .
  • У вас есть gtkmm-2.4 и друзья для Windows, но вам не хватает gtk+-2.0 (нет файла gtk+-2.0.pc) и всех его зависимостей (pango, cairo, gdk, atk, glib...).
  • Вы не должны запускать pkg-config или компилятор с помощью sudo. Sudo не пересылает большинство переменных среды из соображений безопасности. Вот почему sudo pkg-config игнорирует вашу установку Windows.
  • Наконец, PKG_CONFIG_PATH предназначен для добавления дополнительных путей для поиска файлов .pc. Если все ваши файлы находятся в одном каталоге, достаточно установить PKG_CONFIG_LIBDIR, но вы устанавливаете его неправильно, он должен быть в каталоге lib/pkgconfig.
person rodrigo    schedule 02.12.2011
comment
ОК, похоже, мне нужно скачать GTKmm и скомпилировать его для Windows. Поскольку рекомендуемый сайт gimp.org/~tml/gimp/win32/downloads.html не работает. Здесь (live.gnome.org/gtkmm/MSWindows) только установщик exe. Поэтому я должен использовать эти источники ftp.gnome.org/pub/GNOME/ sources/gtkmm/3.3 и это руководство live.gnome.org/gtkmm/MSWindows/ BuildingGtkmm для самостоятельного создания версии GTKmm для Windows? И после этого... как я буду использовать его для создания своих приложений? - person PhoenixS; 03.12.2011
comment
Если вы хотите использовать pkg-config, как в примере, просто экспортируйте переменную среды PKG_CONFIG_PATH, чтобы указать, где находятся файлы *.pc для Windows. Например, в моей установке у меня есть PKG_CONFIG_LIBDIR=$HOME/mingw/sysroot/mingw/lib/pkgconfig. Тогда запуск i686-pg-mingw32-g++ -o test-gtk test-gtk.cpp 'pkg-config --libs --cflags gtkmm-3.0' будет работать. - person rodrigo; 03.12.2011
comment
Поэтому я скачал установщик GTKmm для Windows, установил его в Windows, а затем скопировал всю папку в Fedora. У меня есть 9 файлов .pc в ./lib/pkgconfig установки GTKmm. Я не мог убедить pkg-config использовать файлы pc из этой папки (хотя я установил переменные PKG_CONFIG_PATH и PKG_CONFIG_LIBDIR), поэтому я скопировал эти файлы .pc в /usr/lib/pkgconfig (откуда он получает файлы), но когда я сейчас пытаюсь запустить pkg-config с помощью: sudo pkg-config --libs --cflags gtkmm-3.0, он получает пакет «gdkmm» требует «pangomm-1.4 ›= 2.27.1», но версия Pangomm 2.8 .8 ошибка - person PhoenixS; 03.12.2011
comment
Не делай этого! Вы смешиваете файлы *.pc для собственной и кросс-компиляторной среды. Что сломается плохо! Экспорт PKG_CONFIG_LIBDIR должен работать. Если нет, попробуйте запустить pkg-config вручную и опубликовать результаты. И, возможно, вам придется отредактировать файлы .pc, чтобы изменить префикс установки. - person rodrigo; 03.12.2011
comment
Я исправил файлы ПК, которые скопировал в /usr/lib/pkgconfig, и вот мой журнал: pastebin.com/KZr8tMQ0 Я действительно не понимаю. Когда я запускаю pkg-config, отсутствует gobject. Когда я запускаю его как root, он отсутствует gdk. Когда я запускаю его с gtkmm-3.0, он генерирует параметры... когда я запускаю его с gtkmm-2.4, происходит сбой, даже если gtkmm-2.4 на самом деле единственный файл gtkmm pc, который у меня есть в папке, установленной в PKG_CONFIG_PATH. - person PhoenixS; 03.12.2011
comment
Кажется, почти готово! Я исправил LIBDIR (устанавливал его таким образом из-за путаницы с человеком pkg-config) и добавил все файлы GTK+ для Win в папку, которую я использую, и теперь pkg-config генерирует настоящий количество текста, но я не понимаю все эти хэш-коды или что это такое? Теперь, когда я запускаю i686-pc-mingw32-g++ -o test-gtk.exe hello.c 'pkg-config --cflags --libs gtkmm-2.4', он пишет: «hello.c:1:21 фатальная ошибка: gtk/gtk.h: нет такого файла или каталога». Hello.c здесь - person PhoenixS; 04.12.2011
comment
Теперь мы подходим к этому. Теперь вам нужно отредактировать .pc вручную, пока параметры -I не будут ссылаться на ваши заголовочные каталоги, а параметры -L не будут ссылаться на каталоги библиотек. Обычно, если вы скопировали всю структуру каталогов из Windows, достаточно изменить prefix строки. - person rodrigo; 04.12.2011
comment
Он по-прежнему сообщает ту же ошибку, но теперь мой вывод pkg-config выглядит как этот. Я не был уверен, нужно ли мне изменить /target на полный путь к папке с GTK или я должен оставить его там. - person PhoenixS; 05.12.2011
comment
Аргументами параметров -I и -L должны быть полные пути к месту хранения соответствующих файлов. Итак, да, вы должны изменить /target на /home/michal/Dropbox/GTK/GTKmm-Devel или что-то еще. - person rodrigo; 05.12.2011
comment
Я изменил /target на полный путь, и в обновлении моего ответа вы можете увидеть, что произошло :-) - person PhoenixS; 05.12.2011