【问题标题】:How to build QTcore4.dll without dependency to MSVCx80.dll?如何在不依赖 MSVCx80.dll 的情况下构建 QTcore4.dll?
【发布时间】:2009-06-26 18:23:57
【问题描述】:

我有一个 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 编程新手)

谢谢你, 迈克尔

【问题讨论】:

  • 更新:我已经静态地构建了 QT,我已经在链接器中包含了 QTcore.lib 并使用 /MT 静态地构建了我的应用程序。我现在看到屏幕保护程序依赖于 MSVCR80.DLL,很可能是因为 QT (QTcore.lib) 的静态构建也依赖于它。 MSVCR80.DLL 对我来说是一个障碍,因为正如我上面所说,我无法在 XP 和 vista 上部署。所以,现在的问题是:有没有办法构建一个不依赖 MSVCR80.DLL 的 QT 应用程序?感谢您的帮助迈克尔

标签: qt deployment msvcrt


【解决方案1】:

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

【讨论】:

  • 谢谢你,Shay,我会重新尝试做一个静态链接。上次我尝试静态链接时,应用程序在退出时导致错误。错误发生在我的代码结束之后,我认为这是由于静态链接的问题。因此,我将稍等片刻,看看是否有将 QT DLL 与 MS CRT 库静态链接的答案。如果有办法做到这一点,我宁愿走那条路。
【解决方案2】:

你有两个选择:

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

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

【讨论】:

    猜你喜欢
    • 2011-11-06
    • 1970-01-01
    • 1970-01-01
    • 2013-01-05
    • 2015-12-17
    • 1970-01-01
    • 2020-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多