Glade 无法启动:符号查找错误

Glade 无法启动:符号查找错误

运行 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_typeGTK 源代码中的声明。就像下面显示的代码一样:

unsigned long gdk_broadway_display_get_type()

修复步骤:

  1. 在我们的文件中写入以下代码。名为 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;
    }
  1. 编译并生成.so文件
    gcc -DMYMOCK -shared -fPIC -o libgdkpatch.so gdk_broadway_display_get_type.c -ldl
    sudo cp libgdkpatch.so /usr/lib/
  1. 在终端中测试(在终端中执行以下命令)
    LD_PRELOAD=libgdkpatch.so glade
  1. 适应桌面文件中的执行命令

    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

相关内容