c - 对 gdk_pixbuf_new_from_file_utf8 的 undefined reference

标签 c gtk

我有以下 C GTK+ 代码,但在尝试编译时遇到以下错误:

undefined reference to 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;
}

谁能告诉我怎么了?

最佳答案

在执行以下操作后成功编译了您的代码:

添加以下两个include:

#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
  • 开罗
  • pango-1.0
  • 自由打字
  • 字体配置
  • gobject-2.0
  • gmodule-2.0
  • glib-2.0

如果你想尝试从 gdk_pixbuf-2.0 开始,你可以省略一些,看看你在链接时是否仍然得到任何 undefined reference 。

刚试过,似乎对于你的代码 gtk-x11-2.0 和 gdk_pixbuf-2.0 就足够了。

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

关于c - 对 gdk_pixbuf_new_from_file_utf8 的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2167954/

相关文章:

c - 仅包含头文件中的特定定义

c - 你如何用 C 找到正则表达式中的所有匹配项?

python - 有什么方法可以手动减少 Python 中对象的引用计数?

c - 在C中手动将4位int(十进制)提取到字符串中

c - 为什么使用 fork() 调用的 c 程序不创建无限循环?

python - 我如何为 MacOS 开发和创建一个独立的 PyGTK 应用程序包,带有本地外观的小部件?

python - 在 python 中,如何获取 gtk 标签的大小(宽度,高度)?

gtk - 如何在 Linux 上使 gtkwindow 背景透明?

我可以使用线程来更改 GTK 镜像吗?

c++ - 呈现多属性 TextView