1

我有一个 Windows 屏幕保护程序,我想使用 QT 库重新编译它,以便可以用于更多平台。我在 Vista 和 XP 上的部署遇到了问题。

我用 MT 静态编译我的屏幕保护程序,并运行依赖项检查器。结果是:

MyScreensaver.SCR 需要几个 DLL,QTCORE4.DLL 但不需要 MSVCx80.DLL。到目前为止,这很好。

我的问题是 QTCORE4.DLL 确实需要 MSVCP80.DLL 和 MSVCR80.DLL 因此我的应用程序无法在 Vista 系统上运行。

我可以构建 QTCORE4.DLL 以静态链接微软库(可能是 Libcmt.lib 吗?),这样我在 MS CRT DLL 中没有任何依赖关系?

限制:

在尝试了各个方向的解决方案之后,似乎最可行的方法是使用 QTCore4.dll 和 QTGui4.dll,但将它们静态链接到 MSVCRT。这样,我的程序和 QT DLL 都不会依赖于 MSVCRT dll。

有针对这个的解决方法吗?(我是 QT 编程新手)

谢谢你,迈克尔

4

2 回答 2

1

你有两个选择:

  • 这些依赖项是Microsoft Visual C++ 运行时库的一部分,您可以在 installshield 中部署该库,然后用户静默安装它,默认情况下 Windows 中不包含 MSVCRT 库,您必须Qt*.dll在 installshield 中部署运行时库并在应用程序目录中复制DLL。

  • 使用Static Linking运行时和 Qt 主要依赖项,使用此选项您只有一个可执行文件,但要静态编译 Qt,您必须拥有 Qt 商业许可证才能用于商业用途。

于 2013-02-20T20:45:13.513 回答
1

我认为他们一致认为您的应用程序的某些部分将使用 /MD(d) 编译,而部分使用 /MT(d) 编译,但如果您控制所有内容(包括 3rd 方库),那么使用 /MT(d) 非常安全.

于 2009-06-26T21:56:54.427 回答