如何建立QTcore4.dll不依赖于MSVCx80.dll?(How to build QTcor

2019-10-16 16:20发布

我有我想要使用Qt库,这样我就可以使供更多的平台重新编译一个Windows屏幕保护程序。 我现在面临与Vista和XP的部署问题。

我静态编译我的屏幕保护MT,并运行依赖检查。 结果如下:

MyScreensaver.SCR需要几个DLLS,QTCORE4.DLL但没有MSVCx80.DLLs。 到目前为止,这是好的。

我的问题是QTCORE4.DLL反过来,确实需要MSVCP80.DLL和MSVCR80.DLL结果我的应用程序无法在Vista系统上运行。

我可以建立QTCORE4.DLL是静态链接的Microsoft库(也许LIBCMT.LIB?),所以我没有在MS CRT DLL的关联性?

限制:

  • 我不希望有用户安装MS VC再发行。 该屏幕只有1 MB,它是ridiculus要求用户只是一个屏幕保护程序做了他的电脑这么多的变化。

  • 我不希望使用的伎俩把MS CRT的DLL在同一应用程序的路径与屏幕,因为屏幕保护程序都安装在system32下,我想那里安装最小可能的文件。

  • 最后,我宁愿产生单片方案,而那一堆的DLL

  • 我试图QT的一个完整的静态编译和链接,但是这是不允许的(如果我理解正确的,在LGPL),也因此不建议根据此: http://www.qtsoftware.com/developer/faqs/为什么-确实-A-静态内置QT-使用最动态视觉工作室运行时库-DO-I-需要部署的,那些与-我的应用程序

试图在各个方向的解决方案后,似乎最可行的一个是使用QTCore4.dll和QTGui4.dll,但让他们静态链接到MSVCRT。 这样一来,无论是我的计划,也没有QT的DLL将有MSVCRT DLL的依赖。

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

谢谢你,迈克尔·

Answer 1:

我认为他们是一致您的应用程序的部分将用/ MD(d)和部分与/ MT(d)进行编译,但是如果你控制一切(包括第三方库),那么它很安全的使用/ MT(d) 。



Answer 2:

你有两个选择:

  • 这些依赖的一部分, 微软的Visual C ++运行时库,你可以在你的InstallShield部署库和用户无提示安装它,而不是默认包含在Windows MSVCRT库,你必须在你的InstallShield部署运行时库和复制Qt*.dll的DLL中你的应用程序目录。

  • 使用Static Linking运行和Qt主要依赖的,有了这个选项,你有一个可执行文件,但Qt的静态编译,你必须有用于商业用途Qt的商业授权。



文章来源: How to build QTcore4.dll without dependency to MSVCx80.dll?