“Skype:符号查找错误:Skype:未定义符号”

mar*_*ius 7 64-bit skype

升级到 11.10 并且 Skype 不再有效。我收到以下错误:

skype: symbol lookup error: skype: undefined symbol: _ZN5QFile3mapExxNS_14MemoryMapFlagsE
Run Code Online (Sandbox Code Playgroud)

尝试从Skype和 Ubuntu 软件中心下载。

小智 11

这不是一个完整的答案,但至少是一种解决方法:

从命令行运行 Skype,手动确保它指向 i386 库:

LD_LIBRARY_PATH=/usr/lib/i386-linux-gnu/ /usr/bin/skype
Run Code Online (Sandbox Code Playgroud)

这是假设您安装了 Skype:i386 软件包(听起来像您这样做)。

真正的解决方案仍然让我望而却步,但可能会因机器而异......

问题与当前向 multiarch 的过渡有关(它允许在同一安装中使用不同架构的库 - 例如 i386 和 amd64。)

从 Ubuntu 软件中心安装的 Skype 是 skype:i386,需要链接 i386 版本的库。我怀疑它沿线的某个地方加载了 amd64 库而不是 i386 版本。(也许是旧软件包遗留下来的损坏安装,或包装不当的第 3 方产品?)

我要


小智 9

我遇到了同样的问题,并按照我在此链接中的解释解决了:

Ubuntu 11.10 + Skype = 符号查找错误

在我的情况下,在错误的版本中发现了一些 libQt/usr/lib32 而不是/usr/lib/i386-linux-gnu.

我想原因是一些非常旧的Skype安装需要强制安装一些32位库为了验证它也适用于你,在终端中执行以下操作

ldd /usr/bin/skype | grep Qt

libQtDBus.so.4 => /usr/lib/i386-linux-gnu/libQtDBus.so.4 (0xf7569000)
libQtGui.so.4 => /usr/lib/i386-linux-gnu/libQtGui.so.4 (0xf6aa3000)
libQtNetwork.so.4 => /usr/lib/i386-linux-gnu/libQtNetwork.so.4 (0xf6967000)
libQtCore.so.4 => /usr/lib/i386-linux-gnu/libQtCore.so.4 (0xf66c5000)
libQtXml.so.4 => /usr/lib/i386-linux-gnu/libQtXml.so.4 (0xf626d000)
Run Code Online (Sandbox Code Playgroud)

验证所有 qt 库都 /usr/lib/i386-linux-gnu//usr/lib32. 如果您在 /usr/lib32 中发现了一些库,我建议您备份它们并将它们从 /usr/lib32 中删除并验证结果

 ldd /usr/bin/skype | grep Qt  
Run Code Online (Sandbox Code Playgroud)

现在找到它们 /usr/lib/i386-linux-gnu/

简而言之,问题是 Skype 在 /usr/lib32 中发现了一些陈旧的 libQt* 库,其中安装了 i386 版本的 libQt。那些旧的库可能是为了让旧的 Skype 工作而安装的


Ant*_*nio 6

这也解决了我的问题。我正在运行 Ubuntu 11.10 64 位并安装了 64 位的 Skype deb 包。在查询 Skype 使用的 Qt 库时,我注意到在 /opt/google/earth 中的 Google Earth 安装中使用了一些 3 个库:

$ ldd /usr/bin/skype | grep Qt
    libQtDBus.so.4 => /usr/lib/i386-linux-gnu/libQtDBus.so.4 (0xf7564000)
    libQtGui.so.4 => /opt/google/earth/free/libQtGui.so.4 (0xf6af9000)
    libQtNetwork.so.4 => /opt/google/earth/free/libQtNetwork.so.4 (0xf69cd000)
    libQtCore.so.4 => /opt/google/earth/free/libQtCore.so.4 (0xf66d2000)
    libQtXml.so.4 => /usr/lib/i386-linux-gnu/libQtXml.so.4 (0xf627a000)
Run Code Online (Sandbox Code Playgroud)

从命令行运行

LD_LIBRARY_PATH=/usr/lib/i386-linux-gnu/ /usr/bin/skype
Run Code Online (Sandbox Code Playgroud)

强制使用i-386-linux-gnu目录中的库并成功启动 Skype。

为了让 Unity / Dash 启动器正常工作,我相应地修改了 Exec 行。这无需使用终端来启动应用程序。

/usr/share/applications在从命令行启动的 gedit 窗口中编辑 Skype 启动器$ gksu gedit[超级用户模式]

然后更换

Exec=skype
Run Code Online (Sandbox Code Playgroud)

经过

Exec=env LD_LIBRARY_PATH=/usr/lib/i386-linux-gnu/ /usr/bin/skype
Run Code Online (Sandbox Code Playgroud)

这样可以从 Ubuntu 11.10 中的 Unity / Dash 启动 Skype