【问题标题】:Gtk-ERROR **: GTK+ 2.x symbols detectedGtk-ERROR **:检测到 GTK+ 2.x 符号
【发布时间】:2013-12-21 01:09:49
【问题描述】:

我正在使用带有以下标志的 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 进行编译,所以我不明白这是怎么回事。

【问题讨论】:

    标签: c linux gcc gtk3 gtk2


    【解决方案1】:

    您将同一个程序链接到 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。

    【讨论】:

    • 谢谢。我喜欢你如何花时间分解如何得出这个结论。今晚我要睡得不那么笨了。
    【解决方案2】:

    我在 python 中使用 matplotlib 包时遇到了同样的问题。下面的代码为我解决了这个问题

    import matplotlib
    matplotlib.use('Agg')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多