运行Xubuntu 18.04 x86_64。
已安装Glade
# apt install glade
当我尝试运行它时:
$ glade
glade: symbol lookup error: glade: undefined symbol: gdk_broadway_display_get_type
可能是某个共享库的缺失或错误版本。感谢你对如何追踪它的任何提示。
编辑以添加来自
$ ldd /usr/bin/glade | grep local
libgtk-3.so.0 => /usr/local/lib/libgtk-3.so.0 (0x00007f27b0fb0000)
libgdk-3.so.0 => /usr/local/lib/libgdk-3.so.0 (0x00007f27b0cc6000)
发布于 2020-07-27 02:19:49
ldd
输出给了我一个想法..。很久以前,我从源代码中构建了一个GTK组件,它似乎已经安装了自己版本的libgtk-3.so
。卸载修改后的软件包修复了Glade问题。我想我将不得不将这个包重新构建成更高版本的GTK。
@N0rbert:非常感谢您的帮助。
发布于 2021-04-11 16:20:46
这是因为Linux的共享库机制。当某些函数被从特定的动态库中删除后,旧的软件仍然引用这些不推荐的函数,这将导致这个问题。
但是,很难找到“.so”的相关版本(本例中是libgtk-3)。所以我决定使用存根特性来解决这个问题。幸运的是,我在GTK源代码中找到了gdk_broadway_display_get_type
的声明。就像下面显示代码一样:
unsigned long gdk_broadway_display_get_type()
修正步骤:
unsigned long gdk_broadway_display_get_type()
{
// I don't care what should be return, just make glade can be open successfully
return 0;
}
gcc -DMYMOCK -shared -fPIC -o libgdkpatch.so gdk_broadway_display_get_type.c -ldl
sudo cp libgdkpatch.so /usr/lib/
LD_PRELOAD=libgdkpatch.so glade
locate Glade.desktop
2)。打开桌面文件sudo vim /usr/share/applications/org.gnome.Glade.desktop
3)。修改执行命令Exec=LD_PRELOAD=libgdkpatch.so glade %F
4)。安装桌面文件sudo desktop-file-install /usr/share/applications/org.gnome.Glade.desktop
https://askubuntu.com/questions/1262084
复制相似问题