首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Glade不会启动:符号查找错误

Glade不会启动:符号查找错误
EN

Ask Ubuntu用户
提问于 2020-07-26 05:30:16
回答 2查看 674关注 0票数 0

运行Xubuntu 18.04 x86_64。

已安装Glade

# apt install glade

当我尝试运行它时:

代码语言:javascript
运行
复制
$ glade
glade: symbol lookup error: glade: undefined symbol: gdk_broadway_display_get_type

可能是某个共享库的缺失或错误版本。感谢你对如何追踪它的任何提示。

编辑以添加来自

代码语言:javascript
运行
复制
$ 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)
EN

回答 2

Ask Ubuntu用户

发布于 2020-07-27 02:19:49

ldd输出给了我一个想法..。很久以前,我从源代码中构建了一个GTK组件,它似乎已经安装了自己版本的libgtk-3.so。卸载修改后的软件包修复了Glade问题。我想我将不得不将这个包重新构建成更高版本的GTK。

@N0rbert:非常感谢您的帮助。

票数 0
EN

Ask Ubuntu用户

发布于 2021-04-11 16:20:46

这是因为Linux的共享库机制。当某些函数被从特定的动态库中删除后,旧的软件仍然引用这些不推荐的函数,这将导致这个问题。

但是,很难找到“.so”的相关版本(本例中是libgtk-3)。所以我决定使用存根特性来解决这个问题。幸运的是,我在GTK源代码中找到了gdk_broadway_display_get_type的声明。就像下面显示代码一样:

代码语言:javascript
运行
复制
unsigned long gdk_broadway_display_get_type()

修正步骤:

  1. 在我们的文件中写下面的代码。命名为gdk_broadway_display_get_type.c
代码语言:javascript
运行
复制
    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”文件
代码语言:javascript
运行
复制
    gcc -DMYMOCK -shared -fPIC -o libgdkpatch.so gdk_broadway_display_get_type.c -ldl
    sudo cp libgdkpatch.so /usr/lib/
  1. 终端测试(在终端执行以下命令)
代码语言:javascript
运行
复制
    LD_PRELOAD=libgdkpatch.so glade
  1. 在桌面文件1中适应执行命令)。找到桌面文件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
票数 0
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1262084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档