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

2024-05-21

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

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 进行编译,所以我不明白这是如何发生的。


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

检查起来很容易:只需运行pkg-config命令独立。顺便说一句,您不需要重复--libs很多次,由于我们正在寻找链接错误,所以我省略了--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。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Gtk-ERROR **:检测到 GTK+ 2.x 符号 的相关文章