2009-06-26 181 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商業許可證。