我有一个 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 中没有任何依赖关系?
限制:
我不想让用户安装 MS VC 可再发行组件。屏幕保护程序只有 1 MB,要求用户在他的计算机上进行如此多的更改只是为了一个屏幕保护程序是可笑的。
我不想使用技巧将 MS CRT dll 与屏幕保护程序放在同一应用程序路径中,因为屏幕保护程序安装在 system32 中,我想在那里安装尽可能少的文件。
最后,我更喜欢生成一个整体程序,而不是一堆 DLL
我尝试了 QT 的完整静态编译和链接,但这是不允许的(如果我理解正确,LGPL),也不建议根据此:http ://www.qtsoftware.com/developer/faqs/为什么-a-statically-built-qt-use-the-dynamic-visual-studio-runtime-libraries-do-i-need-to-deploy-those-with-my-application
在尝试了各个方向的解决方案之后,似乎最可行的方法是使用 QTCore4.dll 和 QTGui4.dll,但将它们静态链接到 MSVCRT。这样,我的程序和 QT DLL 都不会依赖于 MSVCRT dll。
有针对这个的解决方法吗?(我是 QT 编程新手)
谢谢你,迈克尔