我想创建一个自定义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;
}
gnomine --gtk-module=libtest-gtk-module.so
但我得到的只是:Gtk-Message: Failed to load module "libtest-gtk-module.so"
那么为了让GTK加载这个库还需要做些什么呢?
非常感谢提前!
答案 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
您将找到您的程序在哪个位置查找该文件。