我正在尝试在不同的操作系统上部署 Qt 应用程序。
在这个帮助页面之后,Windows 就像一个魅力。不幸的是,我在 Linux 上部署我的软件时遇到了问题。我已阅读此帮助页面,但似乎我不理解该Plugins部分。
到目前为止我做了什么:
- 我已经使用 QMake 编译了我的应用程序
- 我已将所有动态链接库(如:、、、
libQt5Core.so.5...libQt5Core.so.5.11.2)libQt5Gui.so.5添加libQt5Gui.so.5.11.2到与我的应用程序相同的目录中(其中一些出于某种原因是符号链接,但这不是这里的问题) - 我创建了一个名为的子目录
platforms并将libqxcb.so库放在那里 - 我创建了一个 bash 脚本,如我正在运行的教程中建议的那样
编辑:以下错误已经解决:
现在我也在纠结如何以及将哪些插件放入我的目录中。我收到以下错误消息:
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
Available platform plugins are: xcb.
Aborted
根据这个问题,我确实运行ldd libqxcb.so了其中列出了以下库(以及更多)
./libqxcb.so: /usr/lib/x86_64-linux-gnu/libQt5Core.so.5: version `Qt_5.11' not found (required by ./libqxcb.so)
linux-vdso.so.1 (0x00007ffd766c5000)
libQt5XcbQpa.so.5 => /usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5 (0x00007fd2a6181000)
libgthread-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgthread-2.0.so.0 (0x00007fd2a5f7f000)
libglib-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007fd2a5c69000)
libfontconfig.so.1 => /usr/lib/x86_64-linux-gnu/libfontconfig.so.1 (0x00007fd2a5a24000)
libfreetype.so.6 => /usr/lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007fd2a5770000)
libQt5Gui.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5 (0x00007fd2a5007000)
libQt5DBus.so.5 => /usr/lib/x86_64-linux-gnu/libQt5DBus.so.5 (0x00007fd2a4d7d000)
libQt5Core.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 (0x00007fd2a4632000)
libGL.so.1 => /usr/lib/x86_64-linux-gnu/libGL.so.1 (0x00007fd2a43a6000)
...
我已经看到图书馆libQt5DBus.so.5也是必需的。因此,我已将该文件(以及 )复制到所有其他 Qt 库所在libQt5DBus.so.5.11.2的父目录中。platforms
但是,我仍然收到相同的错误消息。
难道是它与第一个输出有关,ldd因为是说“未找到”?
./libqxcb.so: /usr/lib/x86_64-linux-gnu/libQt5Core.so.5: version `Qt_5.11' not found (required by ./libqxcb.so)?
当我查看我的 Windows 部署时,我有其他名为iconengines, imageformats,的文件夹styles,translations我是否还需要提供这些文件夹和库?如果是,我在哪里可以找到它们,我如何检查我需要哪一个?
编辑:新错误
我想出了第一个问题。这是由于一个被忽视的图书馆,即:libQt5XcbQpa.so.5.
但是现在我收到一个新错误:
Cannot mix incompatible Qt library (version 0x50602) with this library (version 0x50b02)
我注意到我要安装应用程序的 PC 上有一个旧的 Qt 安装 (5.6)。我已将我的库(5.11)复制到与我的应用程序和我的 bash 脚本调用相同的文件夹中:
LD_LIBRARY_PATH=$mydirname
export LD_LIBRARY_PATH
我认为这个文件夹现在位于动态链接库的搜索路径中。但是,还有其他安装(5.6)。这些库会在我文件夹中的库之前还是之后找到?我问是因为例如 5.6 安装缺少 QtCharts 库,该库在我的文件夹中提供,但版本为 5.11。这可能是问题的原因吗?
这是我的文件夹的图像:
最终编辑
我让它工作了!问题是我有libQt5DBus.so而不是libQt5DBus.so.5. 因此,它在我的目录中找到了版本 5.11 的所有库,除了libQt5DBus.so在旧安装中找到版本 5.6 的库。
感谢你的帮助。
