我正在用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编译,所以我不明白这是怎么回事。
答案 0 :(得分:11)
您正在将相同的程序链接到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。
您的问题的解决方案是:
答案 1 :(得分:1)
我在python中使用matplotlib包时遇到了同样的问题。以下代码解决了我的问题
import matplotlib
matplotlib.use('Agg')