【发布时间】:2020-01-13 09:59:08
【问题描述】:
我正在部署我用 Qt 构建的东西,由于 LGPL,它是动态链接的。我使用windeployqt.exe 收集必要的 dll,它在 Windows 10 机器上运行良好。当我在 Windows 7 机器上尝试时,我收到了这个错误:
程序无法启动,因为您的计算机中缺少 MSVCP140.dll。
经过一番研究,发现MSVCP140.dll 是Visual Studio 安装的System 32 中的一个dll。我应该让我的客户安装 Visual Studio,这在我的情况下不是一个选项,或者静态链接它。我尝试使用/MT,但我得到了:
用 /MD 覆盖 /MT
大概是因为我不能在不静态编译 Qt 本身的情况下静态链接 Qt 库。
由于 LGPL,我想要做的是动态链接 Qt 库,并静态链接 MSVC 库。有没有办法做到这一点?最好来自 Qt 创建者。
我认为在程序中包含MSVCP140.dll 不是一种选择。
我正在使用 Visual Studio 2019 和 Qt 13.1
【问题讨论】:
-
如果您使用 VS2015 或更高版本构建 Windows 程序,则必须在任何目标系统上安装 MSVCP140.dll(名称将根据您的构建配置而有所不同) - 除非您专门使用早期的工具集。
-
@Adrian 如何在目标系统上安装
MSVCP140.dll?有没有办法将它包含在构建中或静态链接它(也没有静态链接 Qt 库)?我正在使用 Visual Studio 2019 -
您必须重新编译 Qt 才能使用静态运行时(这与静态链接不同)。我不确定这是可能的。我的建议是将 vc_redist 与您为应用程序创建的安装程序打包在一起。我在工作中的所有应用程序中都使用 NSIS。然而,这主要是通过使用 CMake 和我十年前编写的一些 CMake 脚本为我完成的。 NSIS 不需要 CMake,因此您可以自己执行此操作。还有 WIX 和其他一些选项,例如 Qt 安装程序框架。
标签: c++ windows visual-studio qt