Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Gtk-ERROR **: GTK+ 2.x symbols detected

Tags:

c

linux

gcc

gtk2

gtk3

I'm compiling my c application with gcc with the following flags:

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

Now my code compiles with a few warnings but still finishes. When I try to run my program I get:

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

How do I troubleshoot this error? How do I know where to look? Is there some kind of tool I could use online that would scan for GTK3 symbols in my code? I'm compiling with GTK+2 so I don't understand how this is happening.

like image 826
ReX357 Avatar asked Dec 21 '13 01:12

ReX357


2 Answers

You are linking the same program to Gtk+2.0 and Gtk+3.0. And that will not work.

It is easy to check: just run the pkg-config command standalone. BTW, you do not need to repeat --libs so many times, and since we are looking for linking errors, I'm ommiting the --cflags for clarity:

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

Now, it writes a lot of library names, but if you look carefully you'll find these ones:

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

But where do they come from? Well, the Gtk+-2 part is easy: you are asking for it in the command line! The Gtk+-3 part has only one candidate:

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

Bingo! So Clutter-gtk is a Gtk+-3 library. And so should be your program is you want to use Clutter-gtk.

The solutions to your problem are:

  • Port your program to Gtk+-3 and change your compiler command accordingly.
  • Use a different version of Clutter-gtk that uses Gtk+-2. I think you can choose the dependency if you compile Clutter-gtk yourself.
  • Do not use Clutter-gtk.
like image 192
rodrigo Avatar answered Sep 28 '22 07:09

rodrigo


I had the same issue while using matplotlib package in python. The below code solved the issue for me

import matplotlib
matplotlib.use('Agg')
like image 39
Yoganand.N Avatar answered Sep 28 '22 09:09

Yoganand.N