Hi Tristan,
As per my second post, I have been compiling my .so dynamic library and "myapp" with the --export-dynamic flag. I have however, solved the problem. The solution was to replace the dlopen() and other related functions with the correspondening functions in the g_module family. Cheers for your help :) > Date: Fri, 23 Apr 2010 11:04:38 -0400 > Subject: Re: Callbacks when glade file is loaded using a dynamic library > From: t...@gnome.org > To: abx...@msn.com; gtk-app-devel-list@gnome.org > > On Fri, Apr 23, 2010 at 4:40 AM, dfg dfg <abx...@msn.com> wrote: > > Hi Tristan, > > > > I am not sure if the symbols need to be visible in "myapp". Currently, myapp > > attaches a glade file to create its interface and uses dlopen to open the > > .so dynamic library. The .so library loads its own GTK Builder which loads a > > second glade file and attaches it to a container in myapp's glade file. > > Your app has callbacks that need to be looked up by GtkBuilder. > > Your plugin has also callbacks that need to be looked up by GtkBuilder > > The fact you have a plugin and an app is completely besides the point. > > You need to expose the symbols in your *_app_* so that GtkBuider can > read those symbols from the global namespace... of your app... to load > callbacks in your glade file that can only be found in your *app*, which > needs to be compiled with --export-dynamic ... did you try that yet before > writing back to the list please ? > > Thanks, > -Tristan > > > > > > At present state, the callbacks in the .so library are not being found by > > the GTK Builder loaded by the dynamic library. > > However, callbacks contained in "myapp" works perfectly with the glade file > > loaded by myapp. > > > > I am quite new at this, so can you please explain what you mean by "export > > the symbols of my app"? > > > > Cheers :) > > > >> Date: Thu, 22 Apr 2010 22:08:44 -0400 > >> Subject: Re: Callbacks when glade file is loaded using a dynamic library > >> From: t...@gnome.org > >> To: abx...@msn.com > >> CC: gtk-app-devel-list@gnome.org > >> > >> If you have symbols that need to be visible in 'myapp', they need to be > >> exported to in order to by found by a g_module_lookup(); did you also > >> export the symbols of you app ? > >> > >> Cheers, > >> -Tristan > >> > >> On Thu, Apr 22, 2010 at 9:53 PM, dfg dfg <abx...@msn.com> wrote: > >> > 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: t...@gnome.org > >> >> To: abx...@msn.com > >> >> CC: gtk-app-devel-list@gnome.org > >> >> > >> >> On Thu, Apr 22, 2010 at 7:21 PM, dfg dfg <abx...@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. Get them on your phone now. > > > > ________________________________ > > Hotmail & Messenger. Get them on your phone now. _________________________________________________________________ Live connected. Get Hotmail & Messenger on your phone. http://go.microsoft.com/?linkid=9724462 _______________________________________________ gtk-app-devel-list mailing list gtk-app-devel-list@gnome.org http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list