【问题标题】:not able to compile GTK program无法编译 GTK 程序
【发布时间】:2013-08-21 04:10:36
【问题描述】:

操作系统:Fedora 18
内核:3.6.10-4.fc18.x86_64

我无法编译一个简单的 GTK 程序:

#include <gtk/gtk.h>

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

  gtk_init(&argc, &argv);

  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  gtk_widget_show(window);

  gtk_main();

  return 0;
}

命令:

[root@localhost dir]##gcc -o graph graph.c `pkg-config --libs --cflags gtk+-2.0`
/lib64/libGL.so.1: undefined reference to _glapi_tls_Dispatch
collect2: error: ld returned 1 exit status

【问题讨论】:

  • pkg-config --libs --cflags gtk+-2.0 命令输出显示什么?
  • -pthread -I/usr/include/gtk-2.0 -I/usr/lib64/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include /pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng15 -I/usr/include/libdrm -I/usr/include/harfbuzz -lgtk-x11-2.0 -lgdk-x11-2.0 -latk -1.0 -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lglib-2.0

标签: c linux gtk


【解决方案1】:

您需要针对使用命令 pkg-config --libs --cflags gtk+-2.0 找到的库进行构建,因此您需要执行该命令以获取完整的库并包含目录路径,GCC 将获取输出(libs和 cflags) 作为参数,但 GCC 无法理解该命令。因此,您需要执行以下操作 -

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

根据问题更新进行编辑:

在 Fedora 18 上 - mesa-libglapi 需要更新,以修复 _glapi_tls_Dispatch 未定义引用问题,对于 mesa-libglapi-9.0.1-1.fc18.x86_64 版本,此未定义引用问题仍然存在。更新库解决了这个问题 -

          yum update mesa-libglapi

【讨论】:

  • 不,你错过了pkg-config命令前后的“`”字符,它是用来在shell中执行命令的。
  • 哦,对不起.. 但是命令仍然显示错误。让我编辑问题
  • 嗯。所以它一定是一些依赖问题。你知道如何解决它吗?
  • nm -D /usr/lib64/libGL.so | grep glapi - 此命令是否在输出中显示 _glapi_tls_Dispatch ?
  • 我认为这是 Fedora 18 的问题 - 这里是 bugzilla 链接 bugzilla.redhat.com/show_bug.cgi?id=969704,也许您需要更新 mesa-libglapi 或其相关软件包,让自己及时了解问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多