我正在尝试使用虚拟盒子中的Ubuntu机器复制我们目前在物理Ubuntu服务器上运行的应用程序。它是一个QT应用程序,但在服务器上,我们使用来自NPM的pm2运行它。在安装了QT并安装了应用程序所需的驱动程序后,我试图运行它,但一直遇到这个错误:
无法将不兼容的Qt库(版本0x50701)与此库(版本0x50905)混合
我从其他人那里继承了代码,不想将项目更改为QT5.9.5,所以我尝试使用5.7.1运行,我按照其他问题的说明将QT版本更改为5.7.1,但在运行时仍然会出现相同的错误。
我遵循了这里的说明:https://unix.stackexchange.com/questions/116254/how-do-i-change-which-version-of-qt-is-used-for-qmake
当在控制台中使用"qmake-v"检查QT版本时,我得到以下输出:
QMake 3.0版在/home/sam/Qt5.7.1/5.7/gcc_64/lib 中使用Qt 5.7.1版
因此,尽管在我看来我使用的是所需版本的Qt(5.7.1),但我仍然遇到了不兼容的库问题,我对这一切都很陌生,所以如果这是一个愚蠢的问题,我很抱歉。如果有人能告诉我该怎么做才能使用兼容的库,那就太好了,谢谢。
我将尝试分步骤对此进行解释!
-
每个完整的Qt库集合称为Qt"分布"。你可以从各种来源获得Qt分布:
- 从操作系统的软件包管理器安装(.deb/.rpm)
- 从上下载的zip文件http://qt.io
- 作为git的克隆repo
- 等等
-
一些可用的Qt发行版将预先构建,有些则需要从源代码构建。在任何一种情况下,它们都将具有特定于该特定Qt分布的
qmake
程序。该程序负责构建程序,以便它们链接到qmake
所属的特定Qt分发。当使用QtCreator
进行建筑时,也使用qmake
。 -
如果你有一个用一个
qmake
构建的二进制文件,并且你试图在另一台计算机上运行它,它可能会在动态链接过程中发现错误的Qt库,并抛出"不兼容版本的Qt"的错误。
这个问题有很多解决方案;
- 将所有Qt库(我的库位于/home/myusername/Qt/5.version/gcc_64/lib/*.so)收集到与程序可执行文件相同的文件夹中。这将确保它们优先于动态链接器路径中的任何其他版本的Qt
- 卸载操作系统提供的Qt版本。这可能是不可取的,尤其是在其他程序使用它们的情况下
- 使用正确的
qmake
从源代码重新构建程序