【问题标题】:Compiling and Linking GTK 3 with C project on Ubuntu在 Ubuntu 上使用 C 项目编译和链接 GTK 3
【发布时间】:2012-07-18 17:19:50
【问题描述】:

我相信这不是一个重复的问题,我在发布这个问题之前已经看过所有问题/答案。我想我这里的情况有所不同。

我使用 Ubuntu 12.04 并下载了 GTK 2 和 3。我从 GNOME 的网站上复制了一个简单的 GTK 源代码。但是当我在终端中使用这个命令时:

gcc `pkg-config --cflags --libs gtk+-3.0`  hello.c -o hello

我明白了:

hello.c:(.text+0x17): undefined reference to `gtk_init'
hello.c:(.text+0x23): undefined reference to `gtk_window_new'
hello.c:(.text+0x47): undefined reference to `gtk_main_quit'
hello.c:(.text+0x5b): undefined reference to `g_signal_connect_data'
hello.c:(.text+0x67): undefined reference to `gtk_widget_show'
hello.c:(.text+0x6c): undefined reference to `gtk_main'

这是我的代码:

#include <gtk/gtk.h>

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

  gtk_init (&argc, &argv);

  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

  g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);

  gtk_widget_show (window);

  gtk_main ();

  return 0;
}

我不确定是否会出现错误,因为我有两个版本的 GTK+ 或什么。 我是 Ubuntu/Linux 应用程序开发的新手。

【问题讨论】:

    标签: c gcc gtk


    【解决方案1】:

    您应该使用出现在库之前的源文件作为gcc hello.c $(pkg-config --cflags --libs gtk+-3.0) -o hello 进行编译,原因是链接器的行为,即除非在编译之前看到该库的符号,否则它不会链接库。
    希望这会有所帮助!

    【讨论】:

    • +1,完全正确!较新的 GCC/binutils 版本的行为非常奇怪和令人不安。
    • @H2CO3:是的,先生(/女士)!这也是关于 SO 的一个很受欢迎的问题 :)
    • 这个语法也可以:gcc hello.c `pkg-config --cflags --libs gtk+-3.0` -o hello
    【解决方案2】:

    您也可以将 gtk 库直接包含到您的项目中:

    1. 在 Eclipse 中展开:Project > Properties > C/C++ Build > Settings > Tool Settings > Cross GCC Linker > Libraries
    2. 设置:库搜索路径 (-L) 到文件“libgtk-n.so”的路径,n 作为您的版本。在 Lubuntu 上安装 (apt-get install libgtk-3-dev) 后,这对我来说是“/usr/lib/x86_64-linux-gnu/”。
    3. 然后添加到库(-l):gtk-n

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-09
      • 2010-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-03
      • 2020-12-14
      相关资源
      最近更新 更多