未定义的引用gdk_pixbuf_new_from_file_utf8

时间:2010-01-30 13:14:10

标签: c gtk

我有以下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 个答案:

答案 0 :(得分:4)

执行以下操作后,只需成功编译代码:

添加以下两个包括:

#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
  • ATK-1.0
  • GIO-2.0
  • pangoft2-1.0
  • gdk_pixbuf-2.0
  • pangocairo-1.0
  • 开罗
  • 的pango-1.0
  • freetype的
  • 的fontconfig
  • 的GObject-2.0
  • gmodule-2.0
  • 油嘴-2.0

如果你想尝试从gdk_pixbuf-2.0开始,看看你在链接时是否仍然得到任何未定义的引用,你可能会遗漏一些。

刚试过,似乎对你的代码gtk-x11-2.0和gdk_pixbuf-2.0来说已经足够了。

快速谷歌似乎表明,在项目选项窗口中,您应该有一个链接器选项卡,您可以在其中列出应与您的代码链接的所有库。如果你不在linux / unix上,你可能需要一个不同的gtk库,因为gtk-x11-2.0特定于X Window系统。

答案 1 :(得分:2)

gdk_pixbuf_new_from_filegtk-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的别名。这就是为什么错误消息显示的函数名称与您在代码示例中实际使用的函数名称不同。)

答案 2 :(得分:1)

从未使用过GTK,但是2秒的谷歌搜索建议您需要添加:

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

到文件的顶部。