我想创建一个自定义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;
}
Run Code Online (Sandbox Code Playgroud)
gnomine --gtk-module=libtest-gtk-module.so
但我得到的是:Gtk-Message: Failed to load module "libtest-gtk-module.so"
那么还有什么方法可以让GTK加载这个库?
提前谢谢了!
您需要让系统了解该库。对于系统目录中的库,以 root 身份运行 ldconfig 就足够了。看看这里的教程。
[编辑]
我按如下方式加载模块:
由于这是 C++ 代码,因此您需要确保函数名称没有被名称损坏:
extern "C" {
void gtk_module_init(gint *argc, gchar ***argv[]) {
std::cout << "huhu" << std::endl;
}
}
Run Code Online (Sandbox Code Playgroud)我用以下内容构建了它:
g++ -fPIC -shared -Wl,-soname,libfoo.so.1 -olibfoo.so.1.0.1 `pkg-config --libs --cflags gtk+-3.0` t.c
Run Code Online (Sandbox Code Playgroud)我使用绝对路径来避免弄乱 ldconfig,这可能是开发模块时最好的做法:
~$ gedit --gtk-module=/home/eric/libfoo.so.1.0.1 t.c
huhu
Run Code Online (Sandbox Code Playgroud)这是在 Mint LMDE 上,而不是 Ubuntu,但我认为这并不重要。