运行 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)
答案1
输出ldd
给了我一个想法...很久以前,我从源代码构建了一个 GTK 组件,它似乎安装了自己的版本libgtk-3.so
。卸载更改的软件包解决了 Glade 问题。我想我必须将软件包重建为更高版本的 GTK。
@N0rbert:非常感谢您的帮助。
答案2
这是因为Linux的共享库机制导致的,一旦某个动态库中的某些函数被弃用,老版本的软件仍然引用这些被弃用的函数,就会引发这个问题。
但是,要找到 '.so' 的相关版本(本例中为 libgtk-3.so)并不容易。所以我决定使用存根功能来解决这个问题。幸运的是我找到了gdk_broadway_display_get_type
GTK 源代码中的声明。就像下面显示的代码一样:
unsigned long gdk_broadway_display_get_type()
修复步骤:
- 在我们的文件中写入以下代码。名为 gdk_broadway_display_get_type.c
unsigned long gdk_broadway_display_get_type()
{
// I don't care what should be return, just make glade can be open successfully
return 0;
}
- 编译并生成.so文件
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
适应桌面文件中的执行命令
1). 找到桌面文件
locate Glade.desktop
2).打开桌面文件
sudo vim /usr/share/applications/org.gnome.Glade.desktop
3). 修改exec命令
Exec=LD_PRELOAD=libgdkpatch.so glade %F
4). 安装桌面文件
sudo desktop-file-install /usr/share/applications/org.gnome.Glade.desktop