如何修复错误:无法加载共享库,符号未定义



我有一个使用pyinstaller转换为"一个文件可执行文件"的python脚本。可执行文件在我的计算机中运行没有任何问题。当它在另一台计算机上运行时,其中一个线程似乎在使用 gtk 和 wnck 的地方停止工作。

无法加载由 typelib 引用的共享库 'libwnck-3.so.0':/usr/lib/x86_64-linux-gnu/libwnck-3.0.so.0:未定义的符号:gdk_display_get_monitor_at_window

一旦可执行文件在其他计算机的终端中运行,就会显示上述警告(我猜当它读取导入语句时(。

当它到达下一行时,将引发错误;

screen = Wnck.Screen.get_default()

GLib.GError: g-invoke-error-quark: 无法定位 wnck_screen_get_default:/usr/lib/x86_64-linux-gnu/libwnck-3.0.so.0: undefined symbol: gdk_display_get_monitor_at_window (1(

以下函数在发生错误的位置进行线程化

import gi
gi.require_version('Wnck', '3.0')
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Wnck
def my_window():
screen = Wnck.Screen.get_default()  -- this line throws error
screen.force_update()
while True:
time.sleep(.5)
while Gtk.events_pending():
Gtk.main_iteration()
new_window = screen.get_active_window()
....
....

我正在使用 - Ubuntu 16.04,xenial。 |libgtk-3-0 的版本:3.18.9

其他计算机用途 - Ubuntu 18.04.4 仿生 | libgtk-3-0 版本:3.22.30

您正在使用的libwnck的副本是根据包含gdk_display_get_monitor_at_window()函数的 GDK 版本编译的,但您在系统上安装的 GDK 副本不包含此功能。

gdk_display_get_monitor_at_window()函数是在 GTK 3.22 中引入的,因此您必须确保已安装 GDK 3.22 或更高版本。

最新更新