如何在不依赖MSVCx80.dll的情况下构建QTcore4.dll?

如何在不依赖MSVCx80.dll的情况下构建QTcore4.dll?,qt,deployment,msvcrt,Qt,Deployment,Msvcrt,我有一个windows屏幕保护程序,我想使用QT库重新编译它,这样我就可以为更多的平台提供。 我在Vista和XP上的部署面临问题 我用MT静态编译我的屏幕保护程序,并运行依赖项检查器。 结果是: MyScreensaver.SCR需要几个DLL,QTCORE4.DLL,但不需要MSVCx80.DLL。 到目前为止还可以 我的问题是,QTCORE4.DLL本身确实需要MSVCP80.DLL和MSVCR80.DLL 因此,我的应用程序不能在Vista系统上运行 我是否可以构建QTCORE4.DLL

我有一个windows屏幕保护程序,我想使用QT库重新编译它,这样我就可以为更多的平台提供。 我在Vista和XP上的部署面临问题

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

MyScreensaver.SCR需要几个DLL,QTCORE4.DLL,但不需要MSVCx80.DLL。 到目前为止还可以

我的问题是,QTCORE4.DLL本身确实需要MSVCP80.DLL和MSVCR80.DLL 因此,我的应用程序不能在Vista系统上运行

我是否可以构建QTCORE4.DLL以静态链接到microsoft库(可能是Libcmt.lib?),以便在MS CRT DLL中没有任何依赖项

限制:

  • 我不想让用户安装MS VC可再发行文件。屏幕保护程序只有1MB,仅仅为了一个屏幕保护程序就要求用户在他的计算机上做这么多的更改,真是可笑

  • 我不想使用这个技巧将MS CRT DLL与屏幕保护程序放在同一个应用程序路径中,因为屏幕保护程序安装在system32中,我希望在那里安装尽可能少的文件

  • 最后,我更喜欢生成一个单片程序,而不是一堆DLL

  • 我尝试了QT的完整静态编译和链接,但这是不允许的(如果LGPL正确理解的话),而且根据以下内容,也不建议这样做:

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

有解决办法吗? (我是QT编程新手)

谢谢,,
Michael

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

您有两个选择:

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

  • 使用运行时和Qt主依赖项的
    静态链接
    ,使用此选项您有一个可执行文件,但要静态编译Qt,您必须拥有商业使用的Qt商业许可证


谢谢你,Shay,我将尝试创建静态链接。上次我尝试静态链接时,应用程序在退出时导致错误。错误发生在我的代码结束之后,我认为这是一个问题,因为静态链接。因此,我将稍等片刻,看看静态链接QT DLL和MS CRT库是否有答案。更新:我已经静态地构建了QT,我已经在链接器中包含了QTcore.lib,并使用/MT静态地构建了我的应用程序。我现在看到屏幕保护程序依赖于MSVCR80.DLL,很可能是因为QT(QTcore.lib)的静态构建也依赖于它。MSVCR80.DLL对我来说是一个障碍,因为正如我上面所说的,我无法在XP和vista上部署。所以,现在的问题是:有没有办法构建一个不依赖MSVCR80.DLL的QT应用程序?谢谢你的帮助,迈克尔