неопределенная ссылка на gdk_pixbuf_new_from_file_utf8 - PullRequest
1 голос
/ 30 января 2010

У меня следующий код C GTK +, и я получаю следующую ошибку при попытке компиляции:

неопределенная ссылка на gdk_pixbuf_new_from_file_utf8

Код:

#include <stdlib.h>
#include <gtk/gtk.h>

GdkPixbuf *create_pixbuf(const gchar *filename)
{
    GdkPixbuf *pixbuf;
    GError *error = NULL;
    pixbuf = gdk_pixbuf_new_from_file(filename, &error);
    if (!pixbuf)
    {
        fprintf(stderr, "%s\n", error->message);
        g_error_free(error);
    }

    return pixbuf;
}

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

    GtkWidget *window;

    gtk_init(&argc, &argv);

    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(window), "Center");
    gtk_window_set_default_size(GTK_WINDOW(window), 230, 150);
    gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
    gtk_window_set_icon(GTK_WINDOW(window), create_pixbuf("someimg.jpg"));
    gtk_widget_show(window);

    g_signal_connect_swapped(G_OBJECT(window), "destroy",
        G_CALLBACK(gtk_main_quit), NULL);

    gtk_main();

  return 0;
}

Кто-нибудь может сказать мне, что не так?

Ответы [ 3 ]

4 голосов
/ 30 января 2010

Просто успешно скомпилировал ваш код после выполнения следующих действий:

Добавьте следующие два:

#include <glib/gerror.h>
#include <gdk-pixbuf/gdk-pixbuf.h>

И скомпилировать с:

gcc `pkg-config --cflags --libs gtk+-2.0` test.c -o test

pkg-config дает следующий вывод:

-I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12  -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lgdk_pixbuf-2.0 -lpangocairo-1.0 -lcairo -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lgmodule-2.0 -lglib-2.0

Так что вам нужно связать со следующими библиотеками:

  • GTK-x11-2.0
  • GDK-x11-2.0
  • ака-1,0
  • Gio-2,0 * * один тысяча двадцать-одна
  • pangoft2-1.0
  • gdk_pixbuf-2,0
  • pangocairo-1,0
  • каир
  • Панго-1,0
  • FreeType
  • Fontconfig
  • GObject-2,0
  • GModule-2,0
  • бойкий-2,0

Вы можете пропустить некоторые из них, если хотите попробовать, просто начните с gdk_pixbuf-2.0 и посмотрите, не получите ли вы еще неопределенные ссылки при ссылке.

Только что попробовал, кажется, что для вашего кода достаточно gtk-x11-2.0 и gdk_pixbuf-2.0.

Быстрый Google, похоже, показывает, что в окне настроек вашего проекта у вас должна быть вкладка компоновщика, где вы можете перечислить все библиотеки, которые должны быть связаны с вашим кодом. Если вы не используете linux / unix, вам может потребоваться другая библиотека gtk, поскольку gtk-x11-2.0 специфична для системы X Window.

2 голосов
/ 30 января 2010

gdk_pixbuf_new_from_file определяется в gtk-2.0/gdk-pixbuf/gdk-pixbuf-core.h

Но вместо того, чтобы включать этот файл напрямую, похоже, что библиотека gdk-pixbuf ожидает, что вы будете использовать только один заголовок для всех функций. Попробуйте добавить следующую строку:

#include <gdk-pixbuf/gdk-pixbuf.h>

(gdk_pixbuf_new_from_file - это макрос препроцессора, который просто действует как псевдоним для gdk_pixbuf_new_from_file_utf8. Вот почему в сообщении об ошибке указано имя функции, отличное от того, которое вы использовали в своем примере кода.)

1 голос
/ 30 января 2010

Никогда не использовал GTK, но поиск в 2 секунды подсказывает, что вам нужно добавить:

#include <gdk-pixbuf/gdk-pixbuf.h>

В начало вашего файла.

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