Gtk-ERROR**:检测到GTK + 2.x符号

ReX*_*357 4 c linux gcc gtk2 gtk3

我正在用gcc编译我的c应用程序,并带有以下标志:

gcc evis.c `pkg-config --cflags --libs gtk+-2.0 --libs clutter-gtk-1.0 --libs gthread-2.0` -Wall -o evis
Run Code Online (Sandbox Code Playgroud)

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

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

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

rod*_*igo 11

您正在将相同的程序链接到Gtk + 2.0和Gtk + 3.0.那是行不通的.

它很容易检查:只需运行pkg-config命令standalone.顺便说一下,你不需要重复--libs这么多次,因为我们正在寻找链接错误,所以我省略了--cflags清晰度:

$ pkg-config --libs gtk+-2.0 clutter-gtk-1.0 gthread-2.0
Run Code Online (Sandbox Code Playgroud)

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

... -lgtk-x11-2.0 ... -lgtk-3 ...
Run Code Online (Sandbox Code Playgroud)

但他们从哪里来?好吧,Gtk + -2部分很简单:你在命令行中要求它!Gtk + -3部分只有一个候选人:

$ pkg-config --libs clutter-gtk-1.0
... -lgtk-3 ...
Run Code Online (Sandbox Code Playgroud)

答对了!所以Clutter-gtk是一个Gtk + -3库.所以应该是你的程序是你想要使用Clutter-gtk.

您的问题的解决方案是:

  • 将程序移植到Gtk + -3并相应地更改编译器命令.
  • 使用使用Gtk + -2的不同版本的Clutter-gtk.我想如果你自己编译Clutter-gtk,你可以选择依赖.
  • 不要使用Clutter-gtk.