Создаю в glade интерфейс для проги, вот файл интерфейса: Code: <?xml version="1.0"?> <glade-interface> <!-- interface-requires gtk+ 2.16 --> <!-- interface-naming-policy project-wide --> <widget class="GtkWindow" id="window1"> <child> <widget class="GtkLabel" id="label1"> <property name="visible">True</property> <property name="label" translatable="yes">label</property> </widget> </child> </widget> </glade-interface> Пишу код на си: Code: #include <stdlib.h> #include <stdio.h> #include <gtk/gtk.h> #include <glade/glade.h> int main (int argc, char **argv) { GladeXML *xml; gtk_init(&argc, &argv); glade_init(); xml = glade_xml_new("primer.glade", "window1", NULL); if (!xml) { g_warning("Failed to create the interface"); return 1; } gtk_main(); return 0; } Компилирую: Code: gcc primer.c -o primer `pkg-config --cflags --libs libglade-2.0` Компится без ошибок. запускаю: ./primer Ничего в консоле нету и прога не запускается. Все это дело естественно под Linux. Не пойму почему не работает. Скрин:
Помогли на другом форуме, кому интересно: У меня для Вас большой совет - НЕ ИСПОЛЬЗУЙТЕ LIBGLADE в своих проектах (даже учебных). Для этого есть несколько причин: 1. Использование libglade создает лишнюю привязку к этой библиотеке, а она может быть не установлена на другой машине (в отличие от gtk+) 2. Основное назначение этой библиотеки - работа в самой среде Glade. 3. Так советуют сами разроботчики Glade и Gtk+ Но это не означает, что вы теряете возможность использование Glade xml для построения интерфейса. В Gtk+, начиная с версии 2.12, имеется особый компонент - GtkBuilder, используйте его. В примере, ниже, я покажу, как именно: Code: #include <gtk/gtk.h> int main (int argc, char **argv) { GtkBuilder *builder; //объект, с помощью которого будет построен интерфейс пользователя GtkWidget *mainwindow; //виджет - окно GtkWidget *label; //виджет, с которым мы свяжем label в окне, для управления им gtk_init(&argc, &argv); //инициализируем gtk builder = gtk_builder_new (); //создаем новый GtkBuilder объект gtk_builder_add_from_file(builder, "primer.xml", NULL); //загружаем описание интерфейса из XML файла mainwindow = GTK_WIDGET(gtk_builder_get_object(builder, "mainwindow")); //связываем наше окно с окном из файла label = GTK_WIDGET(gtk_builder_get_object(builder, "label")); //связываем наш label с label из файла gtk_builder_connect_signals (builder, NULL); //подключаем сигналы gtk_label_set_label((GtkLabel*)label, "Привет!"); //задаем текст для метки gtk_widget_show (mainwindow); //показываем окно gtk_main(); //запускаем главный цикл приложения return 0; } void on_mainwindow_destroy (GtkObject *object, gpointer user_data) //обработчик сигнала закрытия главного окна { gtk_main_quit (); //выйти из главного цикла } Собственно, немного изменяется и содержимое файла-описания (я его, как видите, назвал primer.xml): Code: <?xml version="1.0"?> <interface> <requires lib="gtk+" version="2.16"/> <!-- interface-naming-policy project-wide --> <object class="GtkWindow" id="mainwindow"> <property name="window_position">center</property> <property name="default_width">400</property> <property name="default_height">300</property> <signal name="destroy" handler="on_mainwindow_destroy"/> <child> <object class="GtkLabel" id="label"> <property name="visible">True</property> <property name="label" translatable="yes">label</property> </object> </child> </object> </interface> Теперь, при создании нового проекта в Glade, выбирайте формат проекта GtkBuilder и сохраняйте как "файлы GtkBuilder") Для компиляции используйте команду: Code: gcc primer.c -o primer -export-dynamic `pkg-config --cflags --libs gtk+-2.0` Опция export-dynamic означает, что производится динамическое связывание сигналов объектов и обработчиков сигналов. Функция on_mainwindow_destroy нужна для того, что бы программа закрывалась после закрытия окна, в противном случае будет закрываться только окно, но приложение будет оставатся запущенным и висеть в памяти.