如何创建和加载GTK模块?

时间:2012-04-21 16:38:28

标签: module gtk

我想创建一个自定义GTK模块,当我启动GTK应用程序时应该加载它。

关于这个主题的文档很少见,我搜索了很多,但我没能让它运行。我正在使用GTK3在Ubuntu Linux上尝试使用sofar:

  • 使用内部方法void gtk_module_init(gint *argc, gchar ***argv[])编译并链接共享库。据我所知,这应该足以创建一个简单的模块。完整代码:
#include <iostream>
#include <gtk/gtk.h>

void gtk_module_init(gint *argc, gchar ***argv[]) {
    std::cout << "huhu" << std::endl;
}
  • 将此lib放入/usr/lib/x86_64-linux-gnu/gtk-3.0/modules/libtest-gtk-module.so
  • 试图启动这样的应用程序:gnomine --gtk-module=libtest-gtk-module.so但我得到的只是:Gtk-Message: Failed to load module "libtest-gtk-module.so"

那么为了让GTK加载这个库还需要做些什么呢?

非常感谢提前!

2 个答案:

答案 0 :(得分:3)

您需要让系统知道库。对于系统目录中的库,以root身份运行ldconfig应该足够了。看一下教程here

[编辑]

我按如下方式加载模块:

  • 由于这是C ++代码,您需要确保函数名称没有名称损坏:

    extern "C" {
    void gtk_module_init(gint *argc, gchar ***argv[]) {
        std::cout << "huhu" << std::endl;
    }
    }
    
  • 我使用以下内容构建它:

    g++ -fPIC -shared -Wl,-soname,libfoo.so.1 -olibfoo.so.1.0.1 `pkg-config --libs --cflags gtk+-3.0` t.c
    
  • 我使用绝对路径来避免搞乱ldconfig,这可能是开发模块时最好的事情:

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

这是在Mint LMDE,而不是Ubuntu,但我认为这不重要。

答案 1 :(得分:0)

尝试使用strace运行它:

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

您将找到您的程序在哪个位置查找该文件。