在Ubuntu上编译和链接GTK 3和C项目

时间:2012-07-18 17:19:50

标签: c gcc gtk

我认为这不是一个重复的问题,在发布此问题之前,我已经看到了所有问题/答案。我想我在这里有不同的情况。

我使用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应用程序开发的新手。

2 个答案:

答案 0 :(得分:24)

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

答案 1 :(得分:-1)

您还可以将gtk库直接包含在项目中:

  1. 在Eclipse中展开:Project&gt;属性&gt; C / C ++ Build&gt;设置&gt;工具设置&gt; “交叉GCC链接器”&gt;库
  2. 设置:库搜索路径(-L)到文件路径&#34; libgtk-n.so&#34;,n为您的版本。在Lubuntu上安装(apt-get install libgtk-3-dev)后,这是&#34; / usr / lib / x86_64-linux-gnu /&#34;对我来说。
  3. 然后添加到库(-l):gtk -n