2009-06-26 120 views
1

我有一个Windows屏幕保护程序,我想使用QT库进行重新编译,以便我可以提供更多的平台。 我在Vista和XP上部署时遇到问题。如何构建不依赖于MSVCx80.dll的QTcore4.dll?

我用MT静态编译我的屏保,然后运行依赖检查器。 结果如下:

MyScreensaver.SCR需要多个DLLS,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编程)

谢谢 迈克尔

+0

更新: 我已经建立QT静态,我已经包含在链接的QTcore.lib与/ MT建立我applitation也静态。 我现在看到屏幕保护程序依赖于MSVCR80.DLL,很可能是因为QT(QTcore.lib)的静态构建也取决于它。 MSVCR80.DLL对我来说是一个障碍,因为正如我上面所说的,我无法在XP和Vista上进行部署。 所以,现在的问题是: 是否有任何方式来建立一个QT应用程序而不依赖于MSVCR80.DLL? 感谢您的帮助 Michael – Mike 2009-07-08 18:11:51

回答

1

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

+0

谢谢谢谢,我会重试做一个静态链接。上次我试图进行静态链接时,应用程序在退出时导致错误。该错误是在我的代码结束后,我认为这是一个问题,因为静态链接。 因此,我会稍微等一下,看看在静态链接QT DLL与MS CRT库时是否有答案。如果有办法做到这一点,我宁愿这样做。 – Mike 2009-06-30 10:04:35

1

你有两个选择:

  • 这些依赖Microsoft Visual C++ Runtime库的一部分,你可以在你的InstallShield部署库和用户无提示安装它,MSVCRT库默认情况下不包含在Windows,你在您的installshield中部署运行时库并将Qt*.dll DLL复制到您的应用程序目录中。

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