RE: Callbacks when glade file is loaded using a dynamic library




Thank you Tristan.

 

I actually tried the --export-dynamic flag before posting, but could not get it to work. I feel that it is 
most likely a problem in my makefile.am (I am using automake and libtool to generate the makefiles).

 

Here is the make file for the compilation of the dynamic library:

 

libmyplugin= /
libmyplugin_LTLIBRARIES=libmyplugin.la
libmyplugin_la_SOURCES=libmyplugin.c libmyplugincallbacks.c
include_HEADERS = libmyplugincallbacks.h
libmyplugin_la_LDFLAGS= -lc -lgcc -avoid-version @PACKAGE_LDFLAGS@
libmyplugin_la_LIBDADD = --export-dynamic @PACKAGE_LIBS@
INCLUDES = @PACKAGE_CFLAGS@

 

Here is my configure.ac

 

AC_PREREQ(2.59)
AC_INIT(myapp, 1.0)

PKG_CHECK_MODULES(GTK, gtk+-2.0 gmodule-2.0 gmodule-export-2.0)

PACKAGE_CFLAGS="-g -Wall $GTK_CFLAGS"
PACKAGE_LIBS="-g $GTK_LIBS -ltar"
PACKAGE_LDFLAGS="-Wl, --export-dynamic $GTK_LDFLAGS"

AC_SUBST(PACKAGE_CFLAGS)
AC_SUBST(PACKAGE_LIBS)
AC_SUBST(PACKAGE_LDFLAGS)
AM_PROG_LIBTOOL

AC_CANONICAL_SYSTEM
AM_INIT_AUTOMAKE()

AC_PROG_CC

AC_CONFIG_FILES(Makefile src/Makefile src/modules/Makefile src/modules/libmyplugin/Makefile)
AC_OUTPUT


For some reason though, callbacks in "myapp" the main app that loads in the .so files work fine. Any ideas 
appreciated. :)

 


 
Date: Thu, 22 Apr 2010 21:37:48 -0400
Subject: Re: Callbacks when glade file is loaded using a dynamic library
From: tvb gnome org
To: abxccd msn com
CC: gtk-app-devel-list gnome org

On Thu, Apr 22, 2010 at 7:21 PM, dfg dfg <abxccd msn com> wrote:

Hi everyone,

Currently, I have built my main application using glade. This file is then loaded by a C application.

I then created another interface using Glade. When my main application loads, it loads a .so library 
which contains code for this subsection (kind of like a plugin).

The .so file loads in the second glade file and attaches it into the interface of the main application. 
This all works problem.

The problem I am facing now is that gtk_builder_connect_signals (builder, NULL); does not work.

For my .so file, i have 3 files:

  -libmyplugin.c
  -libmyplugincallbacks.h
  -libmyplugincallbacks.c


My code for the libmyplugin.c file looks like this:

  #include <stdlib.h>
  #include <gtk/gtk.h>
  #include "libmyplugincallbacks.h"

  #define GUI "libmyplugingui.ui"
  int startplugin(){
     extern *mainBuilder;
     GtkBuilder *subbuilder;

     //Do things like attach the glade file into the main glade file.
     gtk_builder_connect_signals (builder, NULL);

  }



My libmyplugincallbacks.h

  #include <gtk/gtk.h>

  void myfunc (GtkCellRenderer *cell, GtkCellEditable *editable, const gchar *path, gpointer data);



My libplugincallbacks.c

  #ifdef HAVE_CONFIG_H
  #  include <config.h>
  #endif

  #include "libmyplugincallbacks.h"
  #include <string.h>

  void myfunc(GtkCellRenderer *cell, GtkCellEditable *editable, const gchar *path, gpointer data){
    if (GTK_IS_ENTRY (editable))
      {
      //Do stuff
      }
  }



When I compile my program, the .so file compiles properly. However, when ever I run the program, it loads 
the .so file. Once GTK builder gets to the stage where it connects the signals, it will complain that 
"myfunc" cannot be found. I have double checked the name of the function in my glade file and it is spelt 
and entered correctly.

You generally need to export your symbols by linking the app with
--export-dynamic flag:

pkg-config --libs gmodule-2.0

Should do the right thing to make your symbols visible.

Cheers,
-Tristan
                                          
_________________________________________________________________
Hotmail & Messenger are available on your phone. Try now.
http://go.microsoft.com/?linkid=9724461


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]