未定义的符号原本应该是在 libgtk-3.so.0 里的, 因为Linux共享库的机制, 动态库一迭代, 有些函数可能就弃用了, 接着相关的软件一个接一个地打不开, 这种机制也真是睿智.
作者本来想找一下旧库, 不过兜兜转转实在麻烦, 后面看了下GTK源码还有声明这个函数, 只是没有定义, 返回值是unsigned long, 那么直接打桩就好了.
一. 编写函数
1 2 3 4 5 6 7 8 9 |
// name: gdk_broadway_display_get_type.c // 返回值随便返回吧, 反正软件能打开就行... unsigned long gdk_broadway_display_get_type() { return 0; } |
二. 编译生成动态库
1 2 3 4 |
gcc -DMYMOCK -shared -fPIC -o libgdkpatch.so gdk_broadway_display_get_type.c -ldl sudo cp libgdkpatch.so /usr/lib/ |
三. 软件启动
1 2 3 |
LD_PRELOAD=libgdkpatch.so glade |
四. 修改启动图标内部启动命令
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# 1. 找到glade的图标文件 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 |