创建支持服务单
关注

Q100392: Nuke 11无法在Ubuntu上启动,因为它无法找到或加载Qt平台插件“xcb”

症状

尝试在Ubuntu上启动Nuke 11.0v1或更高版本时,您可能会遇到类似于以下内容的错误:

原因
由于内部使用的Qt版本升级到5.6.1,Nuke 11.0v1开始出现此问题,以便符合VFX参考平台
我们已经确定上述错误与libstdc ++有关。所以库包含在Nuke 11安装目录中。这个库版本似乎与Ubuntu的系统版本冲突,这似乎导致Nuke无法启动。

替代方法
冲突已报告给我们的工程团队,并记录为将在未来版本中解决的错误报告。您可以通过以下网址跟踪其进度并订阅通知:

TP 340253 - Nuke 11无法在Ubuntu上启动,因为它无法找到或加载Qt平台插件“xcb”

要解决此问题,您需要首先确定您看到的错误是由于相同的库冲突造成的。

识别错误原因

首先,在终端中运行以下命令:

LD_DEBUG=libs /usr/local/Nuke11.1v2/Nuke11.1

这应该在终端中提供长输出但是,非常接近结尾,你应该看到类似于以下行的东西:

/usr/local/Nuke11.0v4/libstdc++.so.6: error: version lookup error: version `CXXABI_1.3.8' not found (required by /usr/lib/x86_64-linux-gnu/libmirclient.so.9) (fatal)

如果你在输出中看到这一行,则表明错误是由于相同的libstdc ++。所以我们在Ubuntu上发现了库冲突,并记录为上面的错误。

错误解决方法

要解决此问题,您需要强制使用此库的系统版本,而不是Nuke附带的库。

尝试在终端中运行以下命令:

locate *libstdc++*

这将在其名称中搜索包含libstdc ++的所有文件,这应该在终端中提供类似的输出:

/usr/lib/gcc/x86_64-linux-gnu/5/libstdc++.so
/usr/lib/i386-linux-gnu/libstdc++.so.6
/usr/lib/i386-linux-gnu/libstdc++.so.6.0.21
/usr/lib/x86_64-linux-gnu/libstdc++.so.6
/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21
/usr/local/Nuke11.0v4/libstdc++.so
/usr/local/Nuke11.0v4/libstdc++.so.6
/usr/local/Nuke11.0v4/libstdc++.so.6.0.18
/usr/local/Nuke11.1v2/libstdc++.so
/usr/local/Nuke11.1v2/libstdc++.so.6
/usr/local/Nuke11.1v2/libstdc++.so.6.0.18

我们从输出中寻找的行是/usr/lib/gcc/x86_64-linux-gnu/5/libstdc++.so。这标识了libstdc ++的系统版本。所以我们需要先加载它们。

接下来,通过运行以下命令, l ibstdc ++。so将被预加载并使用系统版本而不是Nuke附带的版本:

export LD_PRELOAD=/usr/lib/gcc/x86_ 64-linux-gnu/5/libstdc++.so export LD_PRELOAD=/usr/lib/gcc/x86_ 64-linux-gnu/5/libstdc++.so

您现在应该可以正常启动Nuke 11。

进一步阅读
以上解决方法将要求您运行导出 LD_PRELOAD = / usr / lib / gcc / x86_ 64-linux-gnu / 5 / libstdc ++。so命令在你启动Nuke的每个终端会话中。

为简化工作流程,您可以创建一个Nuke包装器脚本,该脚本将在启动Nuke之前运行此命令。使用包装器脚本的另一个好处是它只运行导出LD_PRELOAD = / usr / lib / gcc / x86_ 64-linux-gnu / 5 / libstdc ++。启动Nuke时的命令,因此它不会干扰可能依赖此库的任何其他应用程序。

例如,您可以通过第一次复制并将以下行粘贴到文本编辑器中来为Nuke 11.1v2创建包装器脚本:

export LD_PRELOAD=/usr/lib/gcc/x86_64-linux-gnu/5/libstdc++.so
/usr/local/Nuke11.1v2/Nuke11.1

使用扩展名.sh保存此文件,例如“ Nuke 11.1v2.sh ”。然后可以从终端启动此脚本以打开Nuke。

此外,您还可以通过将以下行添加到用户.bashrc文件来创建别名命令:

alias nuke11.1v2 ='~/ filepath /Nuke11.1v2.sh'

这将允许您在终端中键入nuke 11.1v2以运行.sh脚本并使用在启动之前设置的LD_PRELOAD环境变量启动Nuke 11.1v2。

注意:要使用其他版本的Nuke,您必须更新上述示例中的版本号,并保存.sh文件的新副本。

进一步的帮助
如果您在Ubuntu上遇到此问题,并且上述解决方法无法解决问题以允许Nuke启动,请打开支持服务单。请告诉我们问题的症状,您到目前为止所采取的故障排除步骤以及您正在使用的确切操作系统构建。

有关如何打开支持服务单的更多信息,请参见Q100064:如何提出支持服务单文章。

这篇文章有帮助吗?
/

We're sorry to hear that!

Please tell us why.
2 人中有 1 人觉得有帮助

评论