2012-04-21 10 views
5

Quiero crear un módulo GTK personalizado que debe cargarse cuando inicio una aplicación GTK.Cómo crear y cargar un módulo GTK?

La documentación sobre este tema es rara, he buscado mucho pero no pude ejecutarlo. Estoy en Ubuntu Linux con GTK3 e intenté sofar:

  • Compilé y vinculé una biblioteca compartida con el método void gtk_module_init(gint *argc, gchar ***argv[]) dentro. Por lo que yo entendí, esto debería ser suficiente para crear un módulo simple. código completo:
#include <iostream> 
#include <gtk/gtk.h> 

void gtk_module_init(gint *argc, gchar ***argv[]) { 
    std::cout << "huhu" << std::endl; 
} 
  • Ponga esto en lib /usr/lib/x86_64-linux-gnu/gtk-3.0/modules/libtest-gtk-module.so
  • Probamos para iniciar una aplicación de esta manera: gnomine --gtk-module=libtest-gtk-module.so Pero todo lo que consigo es: Gtk-Message: Failed to load module "libtest-gtk-module.so"

Entonces, ¿qué tiene que hacer con el fin de hacer que GTK cargar esta biblioteca?

¡Muchas gracias de antemano!

Respuesta

2

Debe informar al sistema acerca de la biblioteca. Para una biblioteca en un directorio del sistema, debería ser suficiente para ejecutar ldconfig como root. Eche un vistazo al tutorial here.

[EDIT]

que tiene el módulo de carga de la siguiente manera:

  • ya que este es el código C++, es necesario asegurarse de que el nombre de la función no se nombre revuelto:

    extern "C" { 
    void gtk_module_init(gint *argc, gchar ***argv[]) { 
        std::cout << "huhu" << std::endl; 
    } 
    } 
    
  • lo construí con lo siguiente:

    g++ -fPIC -shared -Wl,-soname,libfoo.so.1 -olibfoo.so.1.0.1 `pkg-config --libs --cflags gtk+-3.0` t.c 
    
  • que utiliza una ruta absoluta para evitar ensuciar con ldconfig, este es probablemente el mejor que puede hacer mientras se desarrolla el módulo:

    ~$ gedit --gtk-module=/home/eric/libfoo.so.1.0.1 t.c 
    huhu 
    

Esto es sobre el Mint LMDE, no de Ubuntu, pero Don no creo que importe

+0

Bueno, lo intenté. Pero sin éxito. Tal vez hay algún error en el módulo? El error proporcionado por GTK no es muy útil ... ¡Y gracias por el enlace, parece bastante útil! – Simme

+0

+1 @Simme: compruebe la edición. Lo más probable es que tu problema haya sido con el problema del cambio de nombre. Puede hacer uso de 'readelf' u otras utilidades similares para comprobar si el símbolo' gtk_module_init' (como lo es sin ningún prefijo/sufijo, es decir, que se esté formando) está presente –

0

intenta ejecutar con strace:

strace -eopen add_your_command_here 2>&1 | grep libtest-gtk-module.so 

Usted se dará cuenta en su programa está buscando ese archivo.

Cuestiones relacionadas