Проблема со связанными библиотеками и GTK + - PullRequest
1 голос
/ 13 февраля 2011

При попытке скомпилировать с помощью Code :: Blocks пример с GTK +:

#include stdlib.h
#include gtk/gtk.h

static void helloWorld (GtkWidget *wid, GtkWidget *win)
{
  GtkWidget *dialog = NULL;

  dialog = gtk_message_dialog_new (GTK_WINDOW (win), GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE, "Hello World!");
  gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER);
  gtk_dialog_run (GTK_DIALOG (dialog));
  gtk_widget_destroy (dialog);
}

int main (int argc, char *argv[])
{
  GtkWidget *button = NULL;
  GtkWidget *win = NULL;
  GtkWidget *vbox = NULL;

  /* Initialize GTK+ */
  g_log_set_handler ("Gtk", G_LOG_LEVEL_WARNING, (GLogFunc) gtk_false, NULL);
  gtk_init (&argc, &argv);
  g_log_set_handler ("Gtk", G_LOG_LEVEL_WARNING, g_log_default_handler, NULL);

  /* Create the main window */
  win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  gtk_container_set_border_width (GTK_CONTAINER (win), 8);
  gtk_window_set_title (GTK_WINDOW (win), "Hello World");
  gtk_window_set_position (GTK_WINDOW (win), GTK_WIN_POS_CENTER);
  gtk_widget_realize (win);
  g_signal_connect (win, "destroy", gtk_main_quit, NULL);

  /* Create a vertical box with buttons */
  vbox = gtk_vbox_new (TRUE, 6);
  gtk_container_add (GTK_CONTAINER (win), vbox);

  button = gtk_button_new_from_stock (GTK_STOCK_DIALOG_INFO);
  g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (helloWorld), (gpointer) win);
  gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);

  button = gtk_button_new_from_stock (GTK_STOCK_CLOSE);
  g_signal_connect (button, "clicked", gtk_main_quit, NULL);
  gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);

  /* Enter the main loop */
  gtk_widget_show_all (win);
  gtk_main ();
  return 0;
}

Я получаю следующие ошибки:

ld.exe||cannot find -lgobject-2.0|
ld.exe||cannot find -lglib-2.0|
||=== Build finished: 2 errors, 0 warnings ===|

Я связал оба проекта, но не могу найти способ заставить его работать. Я пробовал как связанные, так и отдельные пакеты из http://www.gtk.org/download-windows.html. Я почти уверен, что это должно быть что-то простое / глупое, но я не смог найти ничего, что могло бы помочь мне решить эту проблему.

Ответы [ 2 ]

2 голосов
/ 13 февраля 2011

Добавили ли вы каталог GTK, содержащий файлы libglib-2.0.a, libgobject-2.0.a, в каталоги поиска Linker.
Это можно сделать по следующему пути:
Settings | Compiler and debugger... | Search directories | Linker | Add.

Полная командная строка для компилятора / компоновщика может быть просмотрена в окне Build Log.Чтобы включить это, перейдите по ссылке:
Settings | Compiler and debugger... | Other Settings | Compiler logging | Full command line

Я не сталкивался с проблемой отсутствующей точки входа, поэтому, возможно, ваша копия GTK повреждена.Загрузите пакет All-in-one с GTK + 2.22

и убедитесь, что вы добавили все включенные каталоги в Search directories | Compiler

.ваш проект использует -mms-bitfields, который можно добавить в: Settings | Compiler and debugger... | Other options, просто вставьте флаг как есть.

0 голосов
/ 13 февраля 2011

Когда code :: blocks запускает ld.exe вместо того, чтобы вызывать его, например: -l glib-2.0, он вызывает его с -lglib-2.0

Добавление пробела перед именем библиотеки в опциях компоновщика code :: block должно исправить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...