2013-12-21 113 views
3

我编译我的C应用程序与下列标志GCC:GTK的错误**:GTK + 2.x的符号检测

gcc evis.c `pkg-config --cflags --libs gtk+-2.0 --libs clutter-gtk-1.0 --libs gthread-2.0` -Wall -o evis 

现在我的代码有一些警告编译,但仍然完成。当我尝试运行我的程序时,我得到:

(evis:1820): Gtk-ERROR **: GTK+ 2.x symbols detected. Using GTK+ 2.x and GTK+ 3 in the same process is not supported 

如何解决此错误?我怎么知道去哪里看?有哪种工具可以在线使用,可以在我的代码中扫描GTK3符号?我正在编译GTK + 2,所以我不明白这是怎么回事。

回答

11

您正在将相同的程序链接到Gtk + 2.0和Gtk + 3.0。这不会起作用。

很容易检查:只需单独运行pkg-config命令。顺便说一句,你不需要重复--libs这么多次,因为我们正在寻找链接错误,我ommiting的--cflags为清楚:

$ pkg-config --libs gtk+-2.0 clutter-gtk-1.0 gthread-2.0 

现在,写了很多库的名字,但如果你仔细看,你会发现这些:

... -lgtk-x11-2.0 ... -lgtk-3 ... 

但他们从哪里来?那么,Gtk + -2部分很简单:您正在命令行中寻求它! Gtk + -3部分只有一个候选人:

$ pkg-config --libs clutter-gtk-1.0 
... -lgtk-3 ... 

宾果!所以Clutter-gtk是一个Gtk + -3库。所以应该是你的程序是你想使用Clutter-gtk。

你的问题的解决方案是:

  • 端口的程序GTK + -3并相应地改变你的编译器命令。
  • 使用不同版本的使用Gtk + -2的Clutter-gtk。我认为如果你自己编译Clutter-gtk,你可以选择依赖。
  • 请勿使用Clutter-gtk。
+1

谢谢。我喜欢你花时间分解如何得出结论。今晚我要睡一觉。 – ReX357