[Glade-users] signal handler problem

Michael Ekstrand mekstran at scl.ameslab.gov
Wed Feb 14 12:15:49 EST 2007


On Wed, 2007-02-14 at 17:59 +0100, salaria113 at yahoo.com wrote:
> Thanks for your answer , I try to compile under Linux with the
> following commands:
> 
> g++ -c -DXTHREADS -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include
> -I/usr/X11R6/include -I/usr/include/atk-1.0 -I/usr/include/pango-1.0
> -I/usr/include/freetype2 -I/usr/include/glib-2.0
> -I/usr/lib/glib-2.0/include -I/usr/include/libglade-2.0 main.cpp

Aha.  You're using a C++ compiler.  C++ mangles symbol names to support
its nifty features such as function overloading.  libglade doesn't deal
well with this.  Therefore, functions which are to be Glade signal
handlers must be declared to use C linkage (with 'extern "C"'), like so:

extern "C" void
openButtonListener( GtkButton *openButton,
                   gpointer   data )
{
    g_print ("Hello World\n");
}

This will disable symbol mangling for this function, so the
'openButtonListener' function is exposed as-is and libglade can find it.
You still need all the export-dynamic jazz, of course.

- Michael

-- 
Michael Ekstrand
Research Assistant, Scalable Computing Laboratory
Goanna, compute cluster and InfiniBand network monitor tool:
        http://www.scl.ameslab.gov/Projects/Monitor/



More information about the Glade-users mailing list